1

私はphpでサイトを開発していて、他の配列内に配列を作成したい関数を持っています。私のクエリはこれです(私はcakephpを使用していますが、この場合は配列の問題だけです。大きなクエリであり、クエリと配列を作成する必要があるため、cakephpからcontainなどを使用するように指示しないでください。このモード)

私の配列$product_ingredientにはいくつかの値が含まれています。

foreach ($product_ingredient as $key) {         
                $ingredient_level1 = $this->ProductIngredientVersion->query('SELECT * FROM ingredients_ingredients
                WHERE ingredients_ingredients.ingredient_id = :ingredient_id
                AND  ingredients_ingredients.product_id = :id 
                AND  ingredients_ingredients.version_id = :version_id 
                AND  ingredients_ingredients.level = 1', array('id' => $id, 'ingredient_id' => $key['products_ingredients']['ingredient_id'], 'version_id' => $key['products_ingredients']['version_id']));


                foreach($ingredient_level1 as $key2){
                    $ingredient_level2 = array($this->ProductIngredientVersion->query('SELECT * FROM ingredients_ingredients
                    WHERE ingredients_ingredients.ingredient_id = :ingredient_id
                    AND  ingredients_ingredients.product_id = :id 
                    AND  ingredients_ingredients.version_id = :version_id 
                    AND  ingredients_ingredients.level = 2', array('id' => $id, 'ingredient_id' => $key2['ingredients_ingredients']['ingredient2_id'], 'version_id' => $key2['ingredients_ingredients']['version_id'])));
                    array_push($ingredient_level1, $ingredient_level2);
                }
                array_push($ingredient_ingredient, $ingredient_level1);
            }

結果は次のとおりです。

array(
    (int) 0 => array(
        (int) 0 => array(
            'ingredients_ingredients' => array(
                'id' => '34',
                'level' => '1'
            )
        ),
        (int) 1 => array(
            (int) 0 => array(
                (int) 0 => array(
                    'ingredients_ingredients' => array(
                        'id' => '35',
                        'level' => '2'
                    )
                )
            )
        )
    )

しかし、私はこの結果が欲しいです

array(
    (int) 0 => array(
        (int) 0 => array(
            'ingredients_ingredients' => array(
                'id' => '34',
                'level' => '1',
                array(
                    'ingredients_ingredients' => array(
                        'id' => '35',
                        'level' => '2'
                    )
            )
        )
    )

どうすれば解決できますか?

4

1 に答える 1

3

交換

array_push($ingredient_ingredient, $ingredient_level1);

array_push(
    $ingredient_ingredient[0][0]['ingredients_ingredients'],
    $ingredient_level1
);

これにより、アレイが適切なカスケードレベルにプッシュされます。ただし、SQLまたは配列構造を他の場所で変更できない場合は、これが最も効率的な方法である可能性が非常に高くなります。

于 2013-03-30T02:16:52.073 に答える