PHP数组根本不排序

时间:2012-11-02 12:25:33

标签: php arrays sorting

我有一个排序数组的问题。 $ infoGroup是之前“ldap_get_entries”调用的结果。当我单步执行此数组时,我将结果放在数组$ names中。 然后我想按照alfabetical顺序排序$ name,我尝试了许多不同的方法但无济于事。数组始终保持与构造顺序相同的顺序。

我错过了什么?

foreach($infoGroup[$i]['member'] as $member) {
 //echo "<li>".$member;
 $go = stripos($member, "n");
 unset($names);
 $ai++;
 if ( $go == 1 ) {
  // extract member name from string
  $temp = substr($member, 0, stripos($member, ","));
  // Strip the CN= and change to lowercase for easy handling
  $temp = str_replace("cn=", "", $temp);                                
  $names[$ai] = ($temp);
 }
 if (natsort($names)){
  foreach ($names as $key => $val) {
   echo "<li>";
   echo "$key $val";
  }
 }
}
$ai = 0;

这是结果,但我尝试对$ names数组进行排序:

  1. Henrik Lindbom
  2. KlausRödel
  3. 管理
  4. Bernd Brandstetter
  5. PROXYUSER
  6. PatrikLöfström
  7. Andreas Galic
  8. Martin Stalder

1 个答案:

答案 0 :(得分:0)

嗯......有点难以解释,但问题是因为你在foreach()循环中对数组进行排序。本质上,由于您是在第一个循环的迭代中创建数组元素,natsort()只有1个要排序的元素,而您的嵌套foreach()循环只输出该1个元素,然后取消设置( )在第二次和进一步的迭代......

提取排序和输出的第二个foreach(),并从第一个循环的顶部删除unset()。这应输出您想要的结果。

像这样......

foreach($infoGroup[$i]['member'] as $member) {
 //echo "<li>".$member;
 $go = stripos($member, "n");
 $ai++;
 if ( $go == 1 ) {
  // extract member name from string
  $temp = substr($member, 0, stripos($member, ","));
  // Strip the CN= and change to lowercase for easy handling
  $temp = str_replace("cn=", "", $temp);                                
  $names[$ai] = ($temp);
 }
}

 if (natsort($names)){
  foreach ($names as $key => $val) {
   echo "<li>";
   echo "$key $val";
  }
 }
$ai = 0;