我有一个从函数iterator_to_array填充的数组。在对其进行排序后(尝试asort()
,ksort()
和rsort()
并且所有这些都显示相同的结果:乱序数组......
这是我的代码。
$fi = new FilesystemIterator($location, FilesystemIterator::SKIP_DOTS);
$file_paths = iterator_to_array( $fi, false);
rsort($file_paths);
echo "<pre>", print_r($file_paths), "</pre>";
print_r
返回:
Array
(
[0] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => /opt/lampp/htdocs/majo/log_files/teste/log2014324.txt
[fileName:SplFileInfo:private] => log2014324.txt
)
[1] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => /opt/lampp/htdocs/majo/log_files/teste/log2014325.txt
[fileName:SplFileInfo:private] => log2014325.txt
)
[2] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => /opt/lampp/htdocs/majo/log_files/teste/log2014323.txt
[fileName:SplFileInfo:private] => log2014323.txt
)
[3] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => /opt/lampp/htdocs/majo/log_files/teste/log2014322.txt
[fileName:SplFileInfo:private] => log2014322.txt
)
)
在清除文件名的例程后,我得到了这个输出:
2014324.txt
2014325.txt
2014323.txt
2014322.txt
但是由于rsort()
(当时使用的函数),它应该是:
2014325.txt
2014324.txt
2014323.txt
2014322.txt
每次2014325.txt
不合适而我似乎无法将其解决,是否有人知道如何解决这个问题?
我可以实现一个涉及以手动方式进行排序的解决方案,但是会花费更多的时间和资源。
PS:ksort()
输出:
2014322.txt
2014323.txt
2014325.txt
2014324.txt
答案 0 :(得分:2)
您正在排序数组的第一级(没有内容的对象)。数组的第二级(可以说......实际上是对象的内容)包含要排序的值。
您需要创建一个不同的方法,为您正确排序。
答案 1 :(得分:2)
iterator_to_array
为您提供了一组对象,但是php并不知道如何比较它们。您必须提取排序键(例如路径)并告诉php按此键排序,例如:
$fi = new FilesystemIterator($location, FilesystemIterator::SKIP_DOTS);
$file_paths = array();
foreach($fi as $f)
$file_paths[$f->getRealPath()] = $f;
ksort($file_paths);
如果您只需要文件路径且对SplFileInfo
提供的其他数据不感兴趣,那么glob
可能是一个更简单的选项:
$file_paths = glob("$location/*");
请注意,glob
输出已经排序。
答案 2 :(得分:1)
function my_sort_function($a,$b){
if ($a->{fileName:SplFileInfo:private} == $b->{fileName:SplFileInfo:private}){
return 0;
}
return ($a->{fileName:SplFileInfo:private} > $b->{fileName:SplFileInfo:private})?1:-1;
}
$fi = new FilesystemIterator($location, FilesystemIterator::SKIP_DOTS);
$file_paths = iterator_to_array( $fi, false);
usort($file_paths,'my_sort_function');
echo "<pre>", print_r($file_paths), "</pre>";
我不知道如何访问你的模型的属性,但我希望这有效