在另一列中查找重复值时,如何将列数据存储为逗号分隔的值?

时间:2018-07-09 14:09:11

标签: php csv multidimensional-array merge

如果任何公司的产品相同,我必须合并或内插子数组值。

预期输出应为:

0 => 
array (
    'company' => '1,6'
    'product' => 5,
),

我的数组是:

array (
    0 => 
    array (
        'company' => 1,
        'product' => 5,
    ),
    1 => 
    array (
        'company' => 2,
        'product' => 4,
    ),
    2 => 
    array (
        'company' => 6,
        'product' => 5,
    ),
    3 => 
    array (
        'company' => 2,
        'product' => 3,
    ),
)

我的代码是:

foreach($prSuppliers as $key=>$val){
    if($prSuppliers[$key]['company_master_id']==$val['company_master_id']){
        $contactemaileach = $val['company_master_id'];
        $imp = implode(',', $contactemaileach);
    }
}

1 个答案:

答案 0 :(得分:0)

implode()不会成为简单/直接解决方案的一部分。您应该使用产品值分配临时键,以便在每次迭代期间确定要处理的是第一次出现(存储整个子数组)还是后续出现的产品(使用/附加/连接新公司值)逗号)。

完成迭代后,用array_values()重新索引数组。

代码:Demo

$array = array (
    0 => 
    array (
        'company' => 1,
        'product' => 5,
    ),
    1 => 
    array (
        'company' => 2,
        'product' => 4,
    ),
    2 => 
    array (
        'company' => 6,
        'product' => 5,
    ),
    3 => 
    array (
        'company' => 2,
        'product' => 3,
    ),
);

foreach ($array as $set) {
    if (!isset($result[$set['product']])) {
        $result[$set['product']] = $set;
    } else {
        $result[$set['product']]['company'] .= ",{$set['company']}";
    }
}
var_export(array_values($result));

输出:

array (
  0 => 
  array (
    'company' => '1,6',
    'product' => 5,
  ),
  1 => 
  array (
    'company' => 2,
    'product' => 4,
  ),
  2 => 
  array (
    'company' => 2,
    'product' => 3,
  ),
)