2016-06-09 82 views
0

我有一个问题 不排序所以我有此数组:递归ksort:数组

Array 
(
[2016] => Array 
    (
     [23] => Array 
      (
       [total_auctions] => 0 
       [total_price] => 0 
      ) 

     [22] => Array 
      (
       [total_auctions] => 0 
       [total_price] => 0 
      ) 

     [21] => Array 
      (
       [total_auctions] => 0 
       [total_price] => 0 
      ) 

     [20] => Array 
      (
       [total_auctions] => 0 
       [total_price] => 0 
      ) 
) 

我想排序键递归。所以,我创建了Methode:

public function sortNestedArrayAssoc($a) 
{ 
    if (!is_array($a)) { 
     return false; 
    } 
    ksort($a); 
    foreach ($a as $k=>$v) { 
     $this->sortNestedArrayAssoc($a[$k]); 
    } 
    return true; 
} 

,但我得到了相同的结果,关键23阵列是第一,我不真正了解问题出在哪里。你能帮我吗 ? Thx提前对不起我的英文

+3

您需要通过引用来传递方法arg。 –

回答

4

由于John Stirling提到,你可以做的事情是通过你的arguments by reference。你可以在你的方法参数中使用&运算符来完成此操作。对于语法将(与正在第一线唯一的变化):

public function sortNestedArrayAssoc(&$a) 
{ 
    if (!is_array($a)) { 
     return false; 
    } 
    ksort($a); 
    foreach ($a as $k=>$v) { 
     $this->sortNestedArrayAssoc($a[$k]); 
    } 
    return true; 
} 

这意味着你然后传递变量到您的功能,直接修改它,而不是什么PHP也通常是通过一个将变量复制到您的函数中。 ksort是在其函数定义中使用按引用传递的函数的示例。

如果您强烈反对使用传递引用,您必须修改代码以将您的变量/数组返回到您更新数组的地方的调用范围。

public function sortNestedArrayAssoc($a) 
{ 
    if (is_array($a)) { 
     ksort($a); 
     foreach ($a as $k=>$v) { 
      $a[$k] = $this->sortNestedArrayAssoc($v); 
     } 
    } 
    return $a; 
} 
+0

通过引用而不是值传递它会有什么好处? – SML

+0

大部分偏好。通过使用传递引用,您可以节省内存使用量(因为PHP不必制作变量的副本,只需修改它即可)。 – MasterOdin

+0

感谢您的回复。看来通过引用在性能上是比较慢的,所以我只是不确定何时使用它。 http://stackoverflow.com/questions/178328/in-php-5-0-is-passing-by-reference-faster – SML