2012-10-19 153 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