我想按自然顺序对位于文件夹中的文件进行排序。 这些文件是:“ 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
我该怎么做才能使其正常工作?
谢谢!!
答案 0 :(得分:1)
在natsort
对数组进行排序时发生,但是键保持不变。因此,当您打印0
索引值时,它将打印10-Test10.docx
。要正确实现此目的,可以将array_multisort
与SORT_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;
}
希望它对您有帮助。
答案 1 :(得分:1)
由于您使用的是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
如果出于任何原因需要知道索引键值,则可以使用foreach($arr as $key => $val){
,而$ key将成为数组的索引。