PHP-如果数组中的值相同,如何分组



这是我的数组示例

Array
(
[0] => Array ( [_id] => 5f76b1788ee23077dccd1a2c [product] => Array ( [0] => Array ( [_id] => 5d0391a4a72ffe76b8fcc610 ) ) [count] => 1 )
[1] => Array ( [_id] => 5f76b6288ee2300700cd1a3a [product] => Array ( [0] => Array ( [_id] => 5d0391b6a72ffe76b8fcc611 ) ) [count] => 1 )
[2] => Array ( [_id] => 5f76d2488ee23083d3cd1a4a [product] => Array ( [0] => Array ( [_id] => 5d0391b6a72ffe76b8fcc611 ) ) [count] => 1) 
)

如果产品价值相同,我想分组,像这样,

Array
(
[0] => Array ( [_id] => 5f76b1788ee23077dccd1a2c [product] => Array ( [0] => Array ( [_id] => 5d0391a4a72ffe76b8fcc610 ) ) [count] => 1 )
[1] => Array ( [_id] => 5f76b6288ee2300700cd1a3a [product] => Array ( [0] => Array ( [_id] => 5d0391b6a72ffe76b8fcc611 ) ) [count] => 2 )
)

保留一级id毫无意义,因为您在合并过程中任意破坏了一些一级id(破坏了关系(。

相反,我建议您只隔离准确相关的数据。

如果这个输出不能满足您的需求,那么我将要求进一步澄清问题。

通过将临时键分配给输出数组,输出数组还可以充当查找数组,通过查找数组可以快速检查唯一性。";零合并运算符";(??(在第一次遇到id时设置0的回退值,这样可以防止生成任何关于未声明密钥的警告。

代码:(演示(

$array = [
['_id' => '5f76b1788ee23077dccd1a2c', 'product' => ['_id'=>'5d0391a4a72ffe76b8fcc610'], 'count'=> 1],
['_id' => '5f76b6288ee2300700cd1a3a', 'product' => ['_id'=>'5d0391b6a72ffe76b8fcc611'], 'count'=> 1],
['_id' => '5f76d2488ee23083d3cd1a4a', 'product' => ['_id'=>'5d0391b6a72ffe76b8fcc611'], 'count'=> 1]
];
$productCounts = [];
foreach ($array as $item) {
$productId = $item['product']['_id'];
$productCounts[$productId] = ($productCounts[$productId] ?? 0) + $item['count'];
}
var_export($productCounts);

输出:

array (
'5d0391a4a72ffe76b8fcc610' => 1,
'5d0391b6a72ffe76b8fcc611' => 2,
)

如果你在问题中坚持想要的输出,那么它可以像这样简单高效。。。

代码:(演示(

$result = [];
foreach ($array as $item) {
$productId = $item['product']['_id'];
if (!isset($result[$productId])) {
$result[$productId] = $item;
} else {
$result[$productId]['count'] += $item['count'];
}
}
var_export(array_values($result));

输出:

array (
0 => 
array (
'_id' => '5f76b1788ee23077dccd1a2c',
'product' => 
array (
'_id' => '5d0391a4a72ffe76b8fcc610',
),
'count' => 1,
),
1 => 
array (
'_id' => '5f76b6288ee2300700cd1a3a',
'product' => 
array (
'_id' => '5d0391b6a72ffe76b8fcc611',
),
'count' => 2,
),
)

您可以尝试以下代码,它将为您工作:-(

<?php
$Myarray = array(['_id'=> '5f76b1788ee23077dccd1a2c', 'product'=> ['_id'=>'5d0391a4a72ffe76b8fcc610'] ,'count'=> 1 ],
['_id'=> '5f76b6288ee2300700cd1a3a', 'product'=> ['_id'=>'5d0391b6a72ffe76b8fcc611'] ,'count'=> 1 ],
['_id'=> '5f76d2488ee23083d3cd1a4a', 'product'=> ['_id'=>'5d0391b6a72ffe76b8fcc611'] ,'count'=> 1 ]
);
$user_array = [];
$temp_array = [];
foreach($Myarray as $temp)
{
$found = array_search($temp['product']['_id'], $temp_array);
if($found !== false)
{
$i = 0;
foreach($user_array as $temp1)
{
if($temp1['product']['_id'] == $temp['product']['_id'])
{
$sum = $temp1['count'] + 1;
$user_array[$i]['count'] = $sum;
}
$i++;
}
}
else
{
array_push($user_array,$temp);
array_push($temp_array,$temp['product']['_id']);
}
}
print_r($user_array);
?>

这将产生低于输出

阵列([0]=>阵列([_id]=>5f76b1788ee23077dccd1a2c[product]=&>;阵列([id]=<5d0391a4a72ffe76b8fcc610([count]=>1([1]=>阵列([_id]=>5f76b6288ee2300700cd1a3a[product]=<阵列([id]=&>;5d0391b6a72ffe76b8fcc611([count]=>2((

相关内容

最新更新