2016-11-14 20 views
0

我想重置大型多維數組中的鍵。我已經找到了解決方案,它實際上是工作:重置多維數組中的數組鍵,遞歸式,通過引用

$fix_keys = function(array $array) use (&$fix_keys) 
{ 
    foreach($array as $k => $val) 
    { 
     if (is_array($val)) 
     { 
      $array[$k] = $fix_keys($val); 
     } 
    } 
    return array_values($array); 
}; 

,問題是,如果我通過大陣列,它變得緩慢,消耗內存。怎麼樣與工作參考重構:

$fix_keys = function(array &$array) use (&$fix_keys) 
{ 
    foreach($array as $k => &$val) 
    { 
     if (is_array($val)) 
     { 
      $array[$k] = $fix_keys($val); 
     } 
    } 
    unset($val); 
    $array = array_values($array); 
}; 

但它搞砸了數組,我得到的是[0] => null。哪裏不對?

編輯:所以輸入數據:

$a = [ 
    'a' => 1, 
    'b' => 2, 
    'c' => [ 
     'aa' => 11, 
     'bb' => [ 
      'ccc' => 1 
     ], 
     'cc' => 33 
    ] 
]; 

,我想有:

array(3) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
    [2]=> 
    array(3) { 
    [0]=> 
    int(11) 
    [1]=> 
    array(1) { 
     [0]=> 
     int(1) 
    } 
    [2]=> 
    int(33) 
    } 
} 
+1

你可以張貼一些輸入與預期輸出沿 –

回答

1

如果內存是你可以嘗試使用yield的問題。我不知道這是否符合您的需要,但在這裏它是:

function reduce($array){ 
    foreach($array as $key => $value){ 
    if(is_array($value)){ 
     reduce($value); 
    } 
    } 

    yield array_values($array); 
} 

您也可以使用send,如果你需要一些邏輯應用於發電機。

0

我找到了解決辦法:

$fix_keys = function(array &$array) use (&$fix_keys) 
{ 
    foreach(array_keys($array) as $k) 
    { 
     if (is_array($array[$k])) 
     { 
      $fix_keys($array[$k]); 
     } 
    } 
    $array = array_values($array); 
};