【问题标题】:if array value is the same then add to the existing array如果数组值相同,则添加到现有数组
【发布时间】:2014-09-11 04:49:34
【问题描述】:

我整天都在和这个作斗争,希望另一双眼睛能给我一些洞察力。我不确定我是否以正确的方式接近这一点。我有一个列出购买的产品的数组,但是如果产品在数组中重复,我想将属性合并在一起。

$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] => 
            )

    )

)

【问题讨论】:

  • array_merge_recursive
  • 在某种查找表中存储id_product - 键是id_product,值是newArray中的索引
  • 如果你使用 id_product 作为数组键,这会让生活变得更轻松,否则你必须每次循环整个事情来找到要添加到哪个子数组。
  • @Dagon 我没想到。好主意!会试试看。
  • 你能发布一个var_dump($product);var_dump($combination) 的例子吗?没有任何 {} 附件的 foreach ($attribute as $attribute) $attributeName = $attribute['name']; 在这里令人困惑。

标签: php arrays


【解决方案1】:

也许可以让它看起来更好一点,但这应该可以:

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'];

【讨论】:

  • 核心函数组合->getAttributesName 返回一个多维数组,我用它来访问名称。你写的这篇文章确实有效,但它没有添加到组合数组中。只需在它命中的数组中添加最后一个
  • 上次编辑。注意'id_product_attribute' 需要来自$attribute 数组,而不是$order。最好不要使用所有数组结构。
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 2014-09-10
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多