2012-10-19 165 views
-1

讓我們說我有一種形式的數組:每個增減鍵遞歸

Array 
(
    [0] => Array 
     (
       [id] => 194 
       [name] => .... 
       [A] => Array 
        (
         [0] => Array 
          (
           [id] => 44 
           [name] => ... 
          ) 
         [1] => Array 
          (
           [id] => 45 
           [name] => ... 
          ) 

        ) 

       [B] => Array 
        (
         [0] => Array 
          (
           [id] => 56 
           [name] => ... 
          ) 
         [1] => Array 
          (
           [id] => 57 
           [name] => ... 
          ) 

        ) 
     ) 
) 

我想有一個遞歸函數來替換所有鍵(0,1,等...)我的陣列中的陣列到陣列的相應字段id的價值,使我的排列成爲

Array 
(
    [194] => Array 
     (
       [id] => 194 
       [name] => .... 
       [A] => Array 
        (
         [44] => Array 
          (
           [id] => 44 
           [name] => ... 
          ) 
         [45] => Array 
          (
           [id] => 45 
           [name] => ... 
          ) 

        ) 

       [B] => Array 
        (
         [56] => Array 
          (
           [id] => 56 
           [name] => ... 
          ) 
         [57] => Array 
          (
           [id] => 57 
           [name] => ... 
          ) 

        ) 
     ) 
) 

**注意**該陣列可以包含數以千計的數據,這就是爲什麼我需要遞歸,數組我放在這裏只是爲了展示它看起來像什麼

+2

NOOO !!!! ***搜索!!!!! ***請!!!!! – hakre

回答

1

傳遞你的數組作爲參數:

function replace_keys($array) 
{ 
    $rekey = array(); 
    foreach ($array as $i => $item) 
    { 
     if (is_array($item)) 
     { 
      $key = isset($item['id']) ? $id : $i; 
      $rekey[$key] = replace_keys($item); 
     } 
     else 
     { 
      $rekey[$i] = $item; 
     } 
    } 
    return $rekey; 
} 
+0

非常感謝你 – user765368

0

我不認爲你需要遞歸,因爲數組的深度是可以預測的。這只是兩個級別。 你只需要兩個的foreach

編輯註釋後

function replace_key(&$array) 
{ 
foreach ($array as $key => &$new_array) 
{ 
    if (key_exists('id', $new_array)) 
    { 
     $array[$new_array['id']] = $new_array; 
    } 

    if (is_array($new_array)) 
    { 
     replace_key($new_array); 
    } 
} 
} 
+0

陣列的深度是不可預知的,這只是一個例子 – user765368

+0

好的,在這種情況下快速的..你可能需要修改 – xelber