0

深くネストされた多次元 PHP 連想配列の更新に問題があります。私が基本的に追加したいのは、その下に配列を持つすべての配列要素に増分値を持つ「parent_id」キーです。

たとえば、私は以下の配列を持っています。

   [root] =>
    Array('child_1' =>
            Array('child1_grandchild_1' => 'gchild1_value',
                  'child1_grandchild_2' =>  Array('grandchild_1' => 'gchildval1',
                                                  'grandchild_2  => 'gchildval2',
                                                  'grandchild_3' => 'gchildval3'),
                  'child1_grandchild_3' => 'gchild3_value'),
    'child_2', =>  Array('child2_grandchild_1' => 'gchildval1',             
                         'child2_grandchild_2' => 'gchildval2'),
    'child_3'  => 'child3_val',
    'child_4'  => 'child4_val'
    ); 

配列値を持つ要素の親キー id 要素を追加したいと考えています。基本的に、上の配列は下の配列に変換されます。しかし、配列がどれほど深くネストされているかわからないため、これを行う方法がわかりません。配列を更新して参照渡ししようとしましたが、うまくいきません。

   [root] =>
    Array( 'parent_id' => 1
           'child_1' =>
            Array('child1_grandchild_1' => 'gchild1_value',
                  'child1_grandchild_2' =>  Array('parent_id' => 2,
                                                  'grandchild_1' => 'gchildval1',
                                                  'grandchild_2  => 'gchildval2',
                                                  'grandchild_3' => 'gchildval3'),
                  'child1_grandchild_3' => 'gchild3_value'),
    'child_2', =>  Array('parent_id' => 3,
                         'child2_grandchild_1' => 'gchildval1',             
                         'child2_grandchild_2' => 'gchildval2'),
    'child_3'  => 'child3_val',
    'child_4'  => 'child4_val'
    ); 
4

1 に答える 1

0

このようなもの?アイテム キーは 1000 から始まります。各ブランチに 1000 を超えるアイテムがある場合は、0 を追加して 10000 または安全なものにします。

$no = 1000;
$no2 = 1;

function addpid(&$item, $key)
{
        global $no;
        global $no2;
        if(is_array($item)){
            $item['parent_id'] = $no;
            $no++;
        }else{
            $no2++;
            $no=$no2*1000;
        }
}

$yourarray

array_walk_recursive($yourarray, 'addpid');
于 2011-05-31T01:10:36.690 に答える