【问题标题】:Why isn't natsort (or natcasesort) working here?为什么 natsort(或 natcasesort)不在这里工作?
【发布时间】:2011-03-24 20:22:30
【问题描述】:

也许我做错了令人尴尬的事情,但为什么这个数组没有被排序?

$narray=array();

$dir_handle = @opendir($path.$projectFolder) or die("Unable to open $path$projectFolder");

$i=0;

while($file = readdir($dir_handle)) {

 $filenameSplit = explode('.',$file);

 if ($file != "." && $file != ".." && $filenameSplit[0] != "logo" && $filenameSplit[1] != "zip" && $filenameSplit[1] != "pdf" && $filenameSplit[1] != "doc" && $filenameSplit[1] != "psd" && $filenameSplit[1] != "") {

  $narray[$i]=$file;

  $i++;
 }

}

natcasesort($narray);

当我根本不尝试对数组进行排序时,我似乎得到了相同的结果。 sort() 有效,但似乎没有其他效果。

感谢您的帮助!


更新:

以下是示例结果:

没有排序

03_piper_file-manager_02.jpg
05_piper_login-page_02.jpg
02_piper_file-manager_no-slides_01.jpg
04_piper_file-manager_02.jpg
01_piper_file-manager_no-slides_01.jpg

sort():

01_piper_file-manager_no-slides_01.jpg
02_piper_file-manager_no-slides_01.jpg
03_piper_file-manager_02.jpg
04_piper_file-manager_02.jpg
05_piper_login-page_02.jpg

使用natsort()natcasesort()

03_piper_file-manager_02.jpg
05_piper_login-page_02.jpg
02_piper_file-manager_no-slides_01.jpg
04_piper_file-manager_02.jpg
01_piper_file-manager_no-slides_01.jpg

我希望至少 natsort 的结果看起来像 sort 的。

【问题讨论】:

  • 也许数组已经排序了?结果通常是按字母顺序排列的,尽管它取决于操作系统。
  • 您能否向我们展示一下您使用natcasesort 获得了什么样的结果,以及您的期望?
  • 您有一些示例数据吗?或者,给定 $narray 的一些设置,你得到了什么,你期望得到什么?
  • 我在帖子中添加了一些示例结果。谢谢!
  • 出于好奇,natcasesort的返回值是多少?

标签: php arrays sorting natsort


【解决方案1】:

natcasesort 维护键/值关系,因此如果您使用索引遍历数组,您将看到这种行为。

natcasesort 之后尝试print_r($narray)。您可以使用 foreach 迭代数组。

foreach ($narray as $elem)
{
   /* operate on $elem */
}

【讨论】:

  • print_r after natcasesort 给了我这个:Array ( [4] => 01_piper_file-manager_no-slides_01.jpg [2] => 02_piper_file-manager_no-slides_01.jpg [0] => 03_piper_file-manager_02.jpg [3] => 04_piper_file-manager_02.jpg [1] => 05_piper_login-page_02.jpg 不幸的是,我没有足够的经验知道该怎么做。
  • @Tim 在迭代之前调用array_values,或者改用foreach 进行迭代。
  • 我更新了我的答案,告诉你如何按顺序遍历数组。
  • 我有一个看起来像这样的 for 循环:for($i=0; $i<sizeof($narray); $i++)
  • @Tim:将 for 循环更改为我的答案中列出的 foreach,并使用 "$elem" 而不是 "$narray[$i]" - 你将被设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
相关资源
最近更新 更多