2013-09-26 2 views
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 
        ) 

      ) 

    ) 

Тем не менее, во второй итерации (и, возможно, даже третий и четвертый, и так далее), у меня дубликаты значений. Во второй итерации я получаю то же значение, что я получил в первой итерации PLUS правильных значения для второй итерации:

[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 
        ) 

      ) 

    ) 

ли вы, ребята, есть какие-либо идеи, что происходит? Было бы очень полезно.

Бест, Nikolaj

ответ

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; 

The $valuesArray получает значения в каждой итерации, и вы никогда не очистили его. Поэтому, когда внешний foreach попадает во второй цикл, $valuesArray получает значения поэтапно. Если вы очистите $valuesArray на каждой итерации внешнего foreach, вы получите то, что захотите.

+0

Прежде всего, спасибо. Это сработало. Во-вторых: Можете ли вы объяснить мне, почему сложение $ valuesArray, являющееся массивом перед foreach, отсортировало проблему? –

+0

проверить мое редактирование .. upvote, если вам понравилось :) – Deepak

+0

А, я вижу. Cheers bud. К сожалению, я пока не могу этого сделать. Для этого нужна большая репутация. : -/ –

Смежные вопросы