1

Magento の使用を開始しました。特定の製品に関連付けられたすべてのカスタム オプションを取得しようとしています。それに対する解決策を見つけましたが、問題が発生しました。

私のPHPコード:

foreach ($_product->getOptions() as $optionInfo) :
    $values = $optionInfo->getValues(); 

    foreach ($values as $values) :
        $valuesArray[$values['option_type_id']] = array("option_type_id" => $values['option_type_id'], "option_id" => $values['option_id'], "title" => $values['title']);
    endforeach;

    $option = array("id" => $optionInfo->getId(), "type" => $optionInfo->getType(), "title" => $optionInfo->getTitle(), "values" => $valuesArray);
    $options[$optionInfo->getId()]= $option;
endforeach;

確かに正しい情報を返します。少なくとも最初の反復では:

[2] => Array
    (
        [id] => 2
        [type] => drop_down
        [title] => Custom option 1
        [values] => Array
            (
                [4] => Array
                    (
                        [option_type_id] => 4
                        [option_id] => 2
                        [title] => Flaphack 1
                    )

                [5] => Array
                    (
                        [option_type_id] => 5
                        [option_id] => 2
                        [title] => Flaphack 2
                    )

                [6] => Array
                    (
                        [option_type_id] => 6
                        [option_id] => 2
                        [title] => Flaphack 3
                    )

            )

    )

ただし、2 回目の繰り返し (およびおそらく 3 回目以降など) では、値が重複しています。2 番目の反復では、最初の反復で得たのと同じ値に加えて、2 番目の反復の正しい値を取得しています。

[1] => Array
    (
        [id] => 1
        [type] => drop_down
        [title] => Custom option 2
        [values] => Array
            (
                [4] => Array
                    (
                        [option_type_id] => 4
                        [option_id] => 2
                        [title] => Flaphack 1
                    )

                [5] => Array
                    (
                        [option_type_id] => 5
                        [option_id] => 2
                        [title] => Flaphack 2
                    )

                [6] => Array
                    (
                        [option_type_id] => 6
                        [option_id] => 2
                        [title] => Flaphack 3
                    )

                [1] => Array
                    (
                        [option_type_id] => 1
                        [option_id] => 1
                        [title] => Flaphack 1.1
                    )

                [2] => Array
                    (
                        [option_type_id] => 2
                        [option_id] => 1
                        [title] => Flaphack 1.2
                    )

                [3] => Array
                    (
                        [option_type_id] => 3
                        [option_id] => 1
                        [title] => Flaphack 1.3
                    )

            )

    )

何が起こっているのか分かりますか?大いに感謝します。

最高、ニコライ

4

1 に答える 1

1

このコードを試して、

foreach ($_product->getOptions() as $optionInfo) :
$values = $optionInfo->getValues(); 
$valuesArray = array(); // added line
foreach ($values as $values) :
    $valuesArray[$values['option_type_id']] = array("option_type_id" => $values['option_type_id'], "option_id" => $values['option_id'], "title" => $values['title']);
endforeach;

$option = array("id" => $optionInfo->getId(), "type" => $optionInfo->getType(), "title" =>    $optionInfo->getTitle(), "values" => $valuesArray);
$options[$optionInfo->getId()]= $option;
endforeach;

$valuesArray各反復で値を取得しており、クリアしたことはありません。したがって、外側foreachが 2 番目のループに$valuesArray入ると、インクリメンタルな方法で値が取得されます。$valuesArray外側の各反復でクリアすると、必要なforeachものが得られます。

于 2013-09-26T02:20:04.380 に答える