0

再帰関数を使用して、継承のある配列を構築しようとしています。

このようなオブジェクト「a」があるとします (親 ID は「b」)。

a = 'Item 1', 'Item 2', Parent_ID, 'Item 3', 'Item 4'

そして、次のようなオブジェクト「b」があります。

b = 'Item X', 'Item Y'

そして、望ましい結果は次のとおりです。

final = 'Item 1', 'Item 2', 'Item X', 'Item Y', 'Item 3', 'Item 4'

したがって、基本的には、親 ID を探し続けて親アイテムを挿入する array_splice 関数です。私はコードでこの方向に進んでいます:

$master_list = array();

getItems("a", $master_list);

function getItems($ID, &$master_list){
    $master_list = retrieve_items($ID); // returns items from "a"

    //if Parent ID exists, run function again to retrieve items from parent and insert them in place of the Parent ID
    if(Parent_ID)
        array_splice($master_list, [parent index], 1, getItems($parentID, $master_list);
}

私の関数はこれを(望ましくない)結果として返しています:

final = 'Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item X', 'Item Y'

明らかに、これは疑似コードであり、要点を理解することだけを目的としています。誰かが私を正しい方向に向けることができますか? 大変感謝しています。

4

2 に答える 2

0

ああ、私はそれを理解することができました:

master_list = buildList(list_id)

function buildList(list_id){
    list = getItems(list_id) //example 'A', 'B', parent_id, 'C'

    if(parent_id){

        array_splice( list, index_of_parent_id, 1, buildList(parent_id) )

    }

    return list
}

みんなの助けに感謝します。

于 2012-12-19T23:05:51.340 に答える
0

array_walk() を使用して配列を解析するようなことを言います

function insert_array(&$item1, $key, $userdata) {
    if($item1 === $userdata['Product_ID']) {
        $item1 = $userdata['insert'];
    }
}

$data['product_id'] = PRODUCT_ID;
$data['insert'] = $b;

array_walk($a,'insert_array',$data);

注:このようなことをしたいが、代わりに値ではなくキーに基づいて行う場合は、単に array_replace() を使用できます。

最も優雅ではありませんが、ここにあります。

while(in_array(Parent_ID,$a,false)) {
    foreach($a as $value) {
        if($value != Parent_ID) {
            $temp[] = $value;
        } else {
            foreach($b as $key => $value2) {
            $temp[] = $value2;
            }
        }
     }
    $a = $temp;
    unset($temp);
}
于 2012-12-19T00:28:28.893 に答える