1

我对数组的排序有问题。$infoGroup 是之前调用 'ldap_get_entries' 的结果。当我逐步浏览这个数组时,我将结果放入数组 $names 中。然后我想按字母顺序对 $names 进行排序,我尝试了多种不同的方法,但无济于事。数组始终保持与构造相同的顺序。

我错过了什么?

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. 亨利克·林德博姆
  2. 克劳斯·罗德
  3. 行政
  4. 伯恩德·布兰德施泰特
  5. 代理用户
  6. 帕特里克·洛夫斯特伦
  7. 安德烈亚斯·加利奇
  8. 马丁·斯塔德
4

1 回答 1

0

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

提取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;
于 2012-11-02T12:32:52.203 回答