2014-09-10 53 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 – 2014-09-10 20:25:32

+0

将'id_product'存储在某种查找表中 - 关键是'id_product',如果您使用id_product作为数组键,那么值'index' in'newArray' – 2014-09-10 20:25:34

+0

,这会使生活变得更容易,否则您必须循环整个事情每次都要找到要添加的子阵列。 – 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返回一个多维数组,我用它来访问该名称。你写的这部分确实可以工作,但它不会添加到组合数组中。只需在阵列中添加最后一个,就可以输入 – 2014-09-10 20:40:49

+0

上次编辑。注意''id_product_attribute''将需要来自'$ attribute'数组而不是'$ order'。最好的我没有所有的数组结构。 – AbraCadaver 2014-09-10 20:50:59

+0

它像一个魅力工作,我感谢帮助! – 2014-09-10 20:51:43

相关问题