2014-09-10 2 views
0

Я боролся с этим весь день и хотел бы, чтобы другой набор глаз мог дать мне некоторое представление. Я не уверен, что даже приближаюсь к этому правильным способом. У меня есть массив, в котором перечислены продукты, купленные, однако, если продукт дублируется в массиве, я хочу объединить атрибуты вместе., если значение массива одинаково, то добавьте в существующий массив

$order = $order->getProducts(); 
$newArray = array(); 
foreach ($order as $order) 
{ 
    $product = new Product($order['product_id']); 

    $combination = new Combination($order['product_attribute_id']); 
    $attribute = $combination->getAttributesName($context->language->id); 
    foreach ($attribute as $attribute) 
     $attributeName = $attribute['name']; 

    $newArray[] = array(
     'id_product' => $order['product_id'], 
     'name' => $product->name[$context->language->id], 
     'combination' => array(
      'id_product_attribute' => $order['product_attribute_id'], 
      'type' => $attributeName 
     ) 
    ); 
} 

Мой массив приходит вне глядя, как этот

Array (
[0] => Array 
    (
     [id_product] => 117 
     [name] => Sidewinder 1-Foot Extension 
     [combination] => Array 
      (
       [id_product_attribute] => 172 
       [type] => Black 
      ) 

    ) 

[1] => Array 
    (
     [id_product] => 117 
     [name] => Sidewinder 1-Foot Extension 
     [combination] => Array 
      (
       [id_product_attribute] => 173 
       [type] => Black & Yellow 
      ) 

    ) 

[2] => Array 
    (
     [id_product] => 119 
     [name] => ENV100 
     [combination] => Array 
      (
       [id_product_attribute] => 0 
       [type] => Black & Yellow 
      ) 

    ) 

) 

Я желающей, чтобы попытаться достичь этого

Array (
[0] => Array 
    (
     [id_product] => 117 
     [name] => Sidewinder 1-Foot Extension 
     [combination] => Array 
      (
       [0] => Array 
        (
         [id_product_attribute] => 172 
         [type] => Black 
        ) 
       [1] => Array 
        (
         [id_product_attribute] => 173 
         [type] => Black & Yellow 
        ) 
      ) 

    ) 
[1] => Array 
    (
     [id_product] => 119 
     [name] => ENV100 
     [combination] => Array 
      (
       [id_product_attribute] => 0 
       [type] => 
      ) 

    ) 

) 
+1

array_merge_recursive –

+0

Храните 'id_product' в какой-то таблице поиска - ключ' id_product', значение - индекс в 'newArray' –

+0

, если вы используете id_product в качестве ключа массива, это значительно облегчит жизнь, иначе вам придется зацикливать всю вещь каждый раз, чтобы найти, к какой подмассиве добавить. – 2014-09-10 20:25:38

ответ

0

Может быть в состоянии сделать это выглядеть немного лучше, но это должно работы:

foreach ($order as $order) { 
    $product = new Product($order['product_id']); 
    $combination = new Combination($order['product_attribute_id']); 
    $attribute = $combination->getAttributesName($context->language->id); 

    $newArray[$order['product_id']] = array(
      'id_product' => $order['product_id'], 
      'name' => $product->name[$context->language->id], 
    ); 

    foreach ($attribute as $attr) {   
     $newArray[$order['product_id']]['combination'][] => array(
       'id_product_attribute' => $attr['id'], // a guess 
       'type' => $attr['name'], 
     ); 
    } 
} 

Ключи массива будет product_id, так что если вы хотите, чтобы они, как вы показываете, то после цикла:

$newArray = array_values($newArray); 

Я принял удар, не зная, что это означает сделать:

foreach ($attribute as $attribute) 
     $attributeName = $attribute['name']; 
+0

Сочетания основных функций-> getAttributesName возвращает многомерный массив, и я использовал это для доступа к имени. Этот фрагмент, который вы написали, действительно работает, однако он не добавляет к массиву комбинаций. Просто добавив последний в массив, он нажал –

+0

Последнее редактирование. Обратите внимание, что '' id_product_attribute'' должен быть из массива '$ attribute', а не' $ order'. Лучше всего я могу обойтись без всех структур массивов. – AbraCadaver

+0

Он работал как шарм, я ценю помощь! –

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