2013-01-16 79 views
-1

在PHP中使用foreach循环,我想ID添加到下面的对象...PHP - 更新多维数组

$ array_before

Array 
(
    [1111] => Array 
     (
      [Name] => Name A 
      [Subcats] => Array 
       (
        [11111] => Array 
         (
          [Name] => Name A.1 
         ) 
        [11112] => Array 
         (
          [Name] => Name A.2 
         ) 
       ) 
     ) 
    [2222] => Array 
     (
      [Name] => Name B 
      [Subcats] => Array 
       (
        [22221] => Array 
         (
          [Name] => Name B.1 
         ) 
        [22222] => Array 
         (
          [Name] => Name B.2 
         ) 
       ) 
     ) 
) 

...所以它看起来类似于如下:

$ array_after

Array 
(
    [1111] => Array 
     (
      [Id] => 1 
      [Name] => Name A 
      [Subcats] => Array 
       (
        [11111] => Array 
         (
          [Id] => 1 
          [Name] => Name A.1 
         ) 
        [11112] => Array 
         (
          [Id] => 2      
          [Name] => Name A.2 
         ) 
        [11113] => Array 
         (
          [Id] => 3      
          [Name] => Name A.2 
         )      
       ) 
     ) 
    [2222] => Array 
     (
        [Id] => 2 
        [Name] => Name B 
      [Subcats] => Array 
       (
        [22221] => Array 
         (
          [Id] => 1      
          [Name] => Name B.1 
         ) 
        [22222] => Array 
         (
          [Id] => 2      
          [Name] => Name B.2 
         ) 
       ) 
     ) 
) 

有人能指出我在正确的方向?

感谢, LG

+0

这只是一个示例,或者是无限数量的(可能的)深度级别? – BenM

+0

期望能够处理n个深度级别 –

回答

6

试试这个:

$id = 0; 
array_walk($array,function(&$a) use (&$id) {$a['id'] = ++$id;}); 

这将修改originl数组中添加的ID,而不是创建一个新的。

+2

+,注意这需要PHP> = 5.3。 –

+0

按预期工作,谢谢 - 我只需在每个深度级别上调用它​​。 再一次,谢谢。 –

+0

如果您有多个深度级别,请尝试['array_walk_recursive'](http://php.net/array-walk-recursive) - 您只需在函数中添加更多内容以确保您处于正确的位置水平。 –