PHP统一重复数组

时间:2018-06-06 20:21:38

标签: php arrays

在我的PHP代码中,我有很多像这样的数组:

0 = ['attr_id':1,'name':'qty','value':'100'];
1 = ['attr_id':1,'name':'qty','value':'200'];
2 = ['attr_id':1,'name':'qty','value':'500'];
3 = ['attr_id':2,'name':'price','value':'10$'];

我希望像这样合并这个数组:

0 = ['attr_id':1,'name':'qty','value':['100','200','500']];
1 = ['attr_id':1,'name':'price','value':'10$'];
你能帮帮我吗? 感谢

2 个答案:

答案 0 :(得分:1)

这是一种循环id的array_column数组并使用key从values数组插入值的方法。

$value = array_column($arr, 'value');
$id = array_column($arr, 'attr_id');
$res =[];

Foreach($id as $key => $i){
    If(!isset($res[$i])) $res[$i] = ['attr_id' => $i, 'name'=>'qty', 'value' => []];
    $res[$i]['value'][] = $value[$key];
}
Var_dump($res);

https://3v4l.org/VXI5E

如您所见,我使用id作为键来跟踪结果数组 如果要清除此值,意味着从0重置计数,请使用array_values。

$res = array_values($res);

编辑:在我的回答中,10 $也在一个数组中,这使我以后更容易使用数组。
如果你必须将它保存为字符串我可以修复它,但稍后使用混合项可能会更难以使用该数组。

答案 1 :(得分:1)

这应该更简单。使用attr_id作为索引构建结果,并附加value

foreach($array as $values) {
    $result[$values['attr_id']]['value'][] = $values['value'];
    $result[$values['attr_id']] = $result[$values['attr_id']] + $values;
}

如果您需要重新索引,只需使用array_values()上的$result