2

最後の子配列に別の子配列を追加しようとしています。

これが私の配列のサンプルです。

Array
(
    [Auto-Trail] => Array
        (
            [name] => Auto-Trail
            [children] => Array
                (
                    [2001] => Array
                        (
                            [name] => 2001
                            [children] => Array
                                (
                                    [Tracker] => Array
                                        (
                                            [name] => Tracker
                                            [children] => Array
                                                (
                                                    [CK] => Array
                                                        (
                                                            [name] => CK
                                                            [children] => Array
                                                                (
                                                                    [Fiat] => Array
                                                                        (
                                                                            [name] => Fiat
                                                                        )

                                                                )

                                                        )

                                                    [EK] => Array
                                                        (
                                                            [name] => EK
                                                            [children] => Array
                                                                (
                                                                    [Fiat] => Array
                                                                        (
                                                                            [name] => Fiat
                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                    [Cheyenne] => Array
                                        (
                                            [name] => Cheyenne
                                            [children] => Array
                                                (
                                                    [630S] => Array
                                                        (
                                                            [name] => 630S
                                                            [children] => Array
                                                                (
                                                                    [Fiat] => Array
                                                                        (
                                                                            [name] => Fiat
                                                                        )

                                                                    [Merc] => Array
                                                                        (
                                                                            [name] => Merc
                                                                            [children] => Array
                                                                                (
                                                                                    [313] => Array
                                                                                        (
                                                                                            [name] => 313
                                                                                        )

                                                                                    [316] => Array
                                                                                        (
                                                                                            [name] => 316
                                                                                        )

                                                                                )

                                                                        )

                                                                )

                                                        )

                                                    [630] => Array
                                                        (
                                                            [name] => 630
                                                            [children] => Array
                                                                (
                                                                    [Fiat] => Array
                                                                        (
                                                                            [name] => Fiat
                                                                        )

                                                                    [Merc] => Array
                                                                        (
                                                                            [name] => Merc
                                                                            [children] => Array
                                                                                (
                                                                                    [313] => Array
                                                                                        (
                                                                                            [name] => 313
                                                                                        )

                                                                                    [316] => Array
                                                                                        (
                                                                                            [name] => 316
                                                                                        )

                                                                                )

                                                                        )

                                                                )

                                                        )

                                                    [634] => Array
                                                        (
                                                            [name] => 634
                                                            [children] => Array
                                                                (
                                                                    [Fiat] => Array
                                                                        (
                                                                            [name] => Fiat
                                                                        )

                                                                    [Merc] => Array
                                                                        (
                                                                            [name] => Merc
                                                                            [children] => Array
                                                                                (
                                                                                    [313] => Array
                                                                                        (
                                                                                            [name] => 313
                                                                                        )

                                                                                    [316] => Array
                                                                                        (
                                                                                            [name] => 316
                                                                                        )

                                                                                )

                                                                        )

                                                                )

                                                        )

                                                    [634U] => Array
                                                        (
                                                            [name] => 634U
                                                            [children] => Array
                                                                (
                                                                    [Fiat] => Array
                                                                        (
                                                                            [name] => Fiat
                                                                        )

                                                                    [Merc] => Array
                                                                        (
                                                                            [name] => Merc
                                                                            [children] => Array
                                                                                (
                                                                                    [313] => Array
                                                                                        (
                                                                                            [name] => 313
                                                                                        )

                                                                                    [316] => Array
                                                                                        (
                                                                                            [name] => 316
                                                                                        )

                                                                                )

                                                                        )

                                                                )

                                                        )

これは、すべての最後の要素に追加したい配列です。

たとえば、[CK][children][Fiat][children] (および最後のすべての子の子) に次を追加する必要があります。この配列は静的になり、最後のすべての子は同じ配列を使用します。

[BOF] => Array
    (
        [name] => Furniture
    )

[CHA] => Array
    (
        [name] => Chassis
    )

すると…][CK][子供][Fiat]は以下のようになります。

                                            [CK] => Array
                                                (
                                                    [name] => CK
                                                    [children] => Array
                                                        (
                                                            [Fiat] => Array
                                                                (
                                                                    [name] => Fiat
                                                                        [children] => Array
                                                                            (
                                                                                [BOF] => Array
                                                                                    (
                                                                                        [name] => Furniture
                                                                                    )

                                                                                [CHA] => Array
                                                                                    (
                                                                                        [name] => Chassis
                                                                                    )
                                                                            )
                                                                )

                                                        )

                                                )

最後の子がすべて同じインデント レベルであるとは限らないことに注意してください。10 個以上の子がインデントされる可能性があります。各配列の配列内の最後の配列を使用する必要があります。

理解するのが難しい場合は申し訳ありませんが、機能するために必要な方法を正確に表現するのに苦労しています.

お時間とご尽力いただきありがとうございます。

4

1 に答える 1

1

このソリューションをチェックしてください(quick'n'dirty):

function injectArray(array $target, array $inject, $depth = 0){
    $hasChildrenKey = array_key_exists('children', $target);
    $hasChildren = $hasChildrenKey && !empty($target['children']);

    if($depth % 2 == 0){
        foreach($target as $k => $v)
            if(is_array($v))
                $target[$k] = injectArray($v, $inject, $depth+1);
    }
    elseif(!$hasChildren){
        if(!$hasChildrenKey)    
            $target['children'] = array();
        $target['children'] = array_merge_recursive($target['children'], $inject);
    }
    else if($hasChildrenKey){
        $target['children'] = injectArray($target['children'], $inject, $depth+1);
    }
    return $target;
};

$testArray = array(
    'Auto-Trail' => array('name' => 'asdf', 
        'children' => array(
            '2001' => array('name' => '2001',
                'children' => array(
                    'Tracker' => array('name' => 'Tracker',
                        'children' =>   array(
                            'CK' => array('name' => 'CK',
                                'children' => array(
                                    'Fiat' => array('name' => 'Fiat')
                                )
                            )
                        )                               
                    )
                )
            )
        )
    )
);

$testInjectArray = array('BOF' => array('name' => 'Furniture'), 'CHA' => array('name' => 'Chassis'));

$result = injectArray($testArray, $testInjectArray);
print_r($result);
于 2012-08-30T10:30:24.097 に答える