如何在 PHP 中对相似键上的关联数组元素进行分组
How to Group associative array elements on similar keys in PHP
我有以下数组
$array = [
{ "key": "2.1", "value": "11", "quantity": "1" },
{ "key": "2.1", "value": "22", "quantity": "1" },
{ "key": "2.5", "value": "19", "quantity": "1" }
]
现在我想按相似的键对其进行分组。
输出应该是:
$array = [
{ "key": "2.1", "value": "11, 22", "quantity": "2" },
{ "key": "2.5", "value": "19", "quantity": "1" }
]
我试过这样,但没有用:
$remove_key = [];
for($len=0; $len<count($array); $len++) {
if( isset($array[$len+1]) AND
$array[$len]['key'] == $array[$len+1]['key']
) {
$array[$len]['value'] = $array[$len]['value'] .', '. $array[$len+1]['value'];
$array[$len]['quantity'] = $array[$len]['quantity'] + $array[$len+1]['quantity'];
array_push($remove_key, $len+1);
}
}
for($rem=0; $rem<count($remove_key); $rem++) {
unset($array[$remove_key[$rem]]);
}
$array = array_values(($array));
一个简单的 foreach()
和 json_encode()
就可以完成这项工作:
<?php
$json = '[
{ "key": "2.1", "value": "11", "quantity": "1" },
{ "key": "2.1", "value": "22", "quantity": "1" },
{ "key": "2.5", "value": "19", "quantity": "1" }
]';
$array = json_decode($json,true);
$final = [];
foreach($array as $arr){
$final[$arr['key']]['key'] = $arr['key'];
$final[$arr['key']]['value'] = (isset($final[$arr['key']]['value'])) ? $final[$arr['key']]['value'].','. $arr['value'] : $arr['value'];
$final[$arr['key']]['quantity'] = (isset($final[$arr['key']]['quantity'])) ? $final[$arr['key']]['quantity']+ $arr['quantity'] : $arr['quantity'];
}
echo $json = json_encode(array_values($final));
我有以下数组
$array = [
{ "key": "2.1", "value": "11", "quantity": "1" },
{ "key": "2.1", "value": "22", "quantity": "1" },
{ "key": "2.5", "value": "19", "quantity": "1" }
]
现在我想按相似的键对其进行分组。
输出应该是:
$array = [
{ "key": "2.1", "value": "11, 22", "quantity": "2" },
{ "key": "2.5", "value": "19", "quantity": "1" }
]
我试过这样,但没有用:
$remove_key = [];
for($len=0; $len<count($array); $len++) {
if( isset($array[$len+1]) AND
$array[$len]['key'] == $array[$len+1]['key']
) {
$array[$len]['value'] = $array[$len]['value'] .', '. $array[$len+1]['value'];
$array[$len]['quantity'] = $array[$len]['quantity'] + $array[$len+1]['quantity'];
array_push($remove_key, $len+1);
}
}
for($rem=0; $rem<count($remove_key); $rem++) {
unset($array[$remove_key[$rem]]);
}
$array = array_values(($array));
一个简单的 foreach()
和 json_encode()
就可以完成这项工作:
<?php
$json = '[
{ "key": "2.1", "value": "11", "quantity": "1" },
{ "key": "2.1", "value": "22", "quantity": "1" },
{ "key": "2.5", "value": "19", "quantity": "1" }
]';
$array = json_decode($json,true);
$final = [];
foreach($array as $arr){
$final[$arr['key']]['key'] = $arr['key'];
$final[$arr['key']]['value'] = (isset($final[$arr['key']]['value'])) ? $final[$arr['key']]['value'].','. $arr['value'] : $arr['value'];
$final[$arr['key']]['quantity'] = (isset($final[$arr['key']]['quantity'])) ? $final[$arr['key']]['quantity']+ $arr['quantity'] : $arr['quantity'];
}
echo $json = json_encode(array_values($final));