簡體   English   中英

數組:如何通過自然順序排序來獲取文件位置?

[英]Array : how to get file position by natural order sorting?

我想按自然順序對位於文件夾中的文件進行排序。 這些文件是:“ 1-Test1.docx”,“ 2-Test2.docx”,“ 3-Test3.docx”,“ 10-Test10.docx”。

當我使用以下內容時:

for( $i= 0 ; $i <= 4; $i++ ){
    $nomfichier = glob("vendor/templates/part3/*.docx");
    natsort ($nomfichier);
    print_r ($nomfichier);
}

我有 :

Array ( [0] => folder1/folder2/1-Test1.docx [2] => folder1/folder2/2-Test2.docx [3] => folder1/folder2/1-Test3.docx [1] => folder1/folder2/10-Test10.docx ) 

沒關系。 但是,當我嘗試使用相同的自然順序回顯每個位置時,它在“ 1-Test1.docx”之后給出了“ 10-Test10.docx”。

    $position = array_search($nomfichier[$i], $nomfichier);
   // echo $nomfichier[$i]. " : ". $position;

給...

folder1/folder2/1-Test1.docx : 0 folder1/folder2/10-Test10.docx : 1 folder1/folder2/2-Test2.docx : 2 folder1/folder2/3-Test3.docx : 3 

而我希望得到以下結果:

folder1/folder2/1-Test1.docx : 0 folder1/folder2/2-Test2.docx : 1 folder1/folder2/3-Test3.docx : 2 folder1/folder2/10-Test10.docx : 3 

我該怎么做才能使其正常工作?

謝謝 !!

它在natsort對數組進行排序時發生,但鍵保持不變。 因此,當您打印0索引值時,它將打印10-Test10.docx 要正確實現此目的,可以將array_multisortSORT_NATURAL標志一起使用,如下所示:

for( $i= 0 ; $i <= 4; $i++ ){
    $nomfichier = glob("uploads/*.jpeg");
    array_multisort($nomfichier, SORT_NATURAL);
    $position = array_search($nomfichier[$i], $nomfichier);
    echo $nomfichier[$i]. " : ". $position;
}

希望對您有幫助。

因為您使用的是for循環,所以索引將覆蓋排序。
當您進行循環並回顯$ arr [1]時,無論排序顯示什么,它仍然是數組中的項目1。

另一方面,Foreach不會循環索引並遵守排序順序。

// Your array
$arr = array (
  0 => 'folder1/folder2/1-Test1.docx ',
  2 => 'folder1/folder2/2-Test2.docx ',
  3 => 'folder1/folder2/1-Test3.docx ',
  1 => 'folder1/folder2/10-Test10.docx ',
);

foreach($arr as $val){
    echo $val . PHP_EOL;
}

輸出:

folder1/folder2/1-Test1.docx 
folder1/folder2/2-Test2.docx 
folder1/folder2/1-Test3.docx 
folder1/folder2/10-Test10.docx 

https://3v4l.org/J3SkA

如果由於某種原因需要知道索引鍵值,則可以使用foreach($arr as $key => $val){而$ key將成為數組的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM