php - 合并具有相同 ID 的数组
问题描述
我有以下数组
Array ( [id] => 1 [name] => [cat_name] => Food & Beverage [quantity] => 1
[price] => 25 [image] => books_image/calories_fat_carbohydrate.png )
Array ( [id] => 2 [name] => [cat_name] => Food & Beverage [quantity] => 5
[price] => 38 [image] => books_image/the_law_relating_to_food.png )
Array ( [id] => 3 [name] => [cat_name] => Food & Beverage [quantity] => 5
[price] => 19 [image] => books_image/it_starts_with_food.png )
Array ( [id] => 3 [name] => [cat_name] => Food & Beverage [quantity] => 2
[price] => 19 [image] => books_image/it_starts_with_food.png )
在 $_SESSION['caritem'] 对象中,键是id
.
我的问题是我有重复,id=3
我想要的输出是
Array ( [id] => 1 [name] => [cat_name] => Food & Beverage [quantity] => 1
[price] => 25 [image] => books_image/calories_fat_carbohydrate.png )
Array ( [id] => 2 [name] => [cat_name] => Food & Beverage [quantity] => 5
[price] => 38 [image] => books_image/the_law_relating_to_food.png )
Array ( [id] => 3 [name] => [cat_name] => Food & Beverage [quantity] => 7
[price] => 19 [image] => books_image/it_starts_with_food.png )
基本上通过相同id
的合并并添加quantity
字段。有没有一种简单的方法可以在 php 中做到这一点?
我不想删除重复项。对我来说重复很重要,因为它们有我需要添加它们的数量。
解决方案
干得好:
// DEFINE SORTING CRITERIA
function sort_ids($a, $b) {
return $a['id'] > $b['id'];
}
// DEFINE ARRAY OF ARRAYS
$arrays = array(
array( 'id' => 1, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 1,
'price' => 25, 'image' => 'books_image/calories_fat_carbohydrate.png' ),
array( 'id' => 2, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 5,
'price' => 38, 'image' => 'books_image/the_law_relating_to_food.png' ),
array( 'id' => 3, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 5,
'price' => 19, 'image' => 'books_image/it_starts_with_food.png' ),
array( 'id' => 3, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 2,
'price' => 19, 'image' => 'books_image/it_starts_with_food.png' ),
array( 'id' => 1, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 1,
'price' => 25, 'image' => 'books_image/calories_fat_carbohydrate.png' ),
array( 'id' => 2, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 5,
'price' => 38, 'image' => 'books_image/the_law_relating_to_food.png' )
);
// SORT ARRAY OF ARRAYS FIRST
usort($arrays, 'sort_ids');
// MERGE DUPLICATES
$record_number = count($arrays);
for ($i=0; $i<$record_number; $i++) {
// if this is not the first loop and if this is a duplicate
if(isset($temp_id) && $temp_id == $arrays[$i]['id']) {
// add quantity of the previous array here
$arrays[$i]['quantity'] += $temp_quantity;
// unset previous array
unset($arrays[$i-1]);
}
$temp_id = $arrays[$i]['id'];
$temp_quantity = $arrays[$i]['quantity'];
}
// PRINT ARRAY OF ARRAYS
echo '<pre>';
print_r($arrays);
echo '</pre>';
推荐阅读
- .net-core - 使用 MassTransit.RabbitMQ 将 OpenTracing TraceIds 从发布者传播到消费者
- abap - 确定 RFC 调用者?
- mysql - mysql中存储过程的语法错误
- django - 对于同一循环中的两个对象的循环迭代
- c# - 如何将多个相同类型的字符 ie("lala,,,,lala") 替换为单数 ("lala,lala")
- java - POI条形图生成一个系列有问题
- r - 获取嵌套在列表列表中的变量的总平均值
- javascript - 使用 Flask 后端中的另一个 sql 查询检查复选框重新生成表
- c# - 当前上下文中不存在名称“LikeShop”
- javascript - 如何迭代一组具有相同类名的 HTML 元素并根据字符计数添加一个类并使用 Dojo 添加一个类