我有一个包含几个对象的数组。
$products = [
{"id":"1","random":"sadasd","mergethis":"Ding"},
{"id":"2","random":"assdfsadf","mergethis":"Ding"},
{"id":"2","random":"assdfsadf","mergethis":"Flop"},
{"id":"2","random":"assdfsadf","mergethis":"Bips"},
{"id":"3","random":"sdfss","mergethis":"Flung"},
{"id":"3","random":"sdfss","mergethis":"Rorg"},
{"id":"4","random":"asdasdddaf","mergethis":"Shwung"}
]我试图迭代这个数组,当id在数组中出现时,我想用第一个具有相同id (用逗号分隔)的命中添加mergethis的值,然后从数组中取消对象设置。
所以我的预期结果是:
[
{"id":"1","random":"sadasd","mergethis":"Ding"},
{"id":"2","random":"assdfsadf","mergethis":"Ding,Flop,Bips"},
{"id":"3","random":"sdfss","mergethis":"Flung,Rorg"},
{"id":"4","random":"asdasdddaf","mergethis":"Shwung"}
]我试图迭代$products并比较值,但我坚持将值与数组的子值进行比较,而不是将其与整个数组进行比较。
foreach($products as $key => $value){
if (in_array($value->id, $products)) {
//Delete this item and add product_category comma sepereated to first item
//unset($products[$key]);
}
}这显然不起作用,因为它将项与整个数组进行比较,而不是将其与数组项的子值id进行比较。
我怎样才能得到预期的结果呢?
我是否需要创建一个填充了每个数组项的键和id值的新数组,并在此基础上进行迭代?还是有一种比较简单的方法来比较数组中的对象值?
发布于 2015-06-10 15:10:18
提示:使用以id为键的关联数组,以整个产品为值:
$results = array();
foreach ($products as $prod){
if (array_key_exists($prod['id'], $results)){
$results[$prod['id']]['mergethis'] .= ',' . $prod['mergethis'];
} else {
$results[$prod['id']] = $prod;
}
}发布于 2015-06-10 15:12:36
$result = [];
foreach ($products as $value) {
if (!isset($result[$value['id']])) {
$value['mergethis'] = [$value['mergethis']];
$result[$value['id']] = $value;
} else {
$result[$value['id']]['mergethis'][] = $value['mergethis'];
}
}这似乎是最明智的做法。如果确实需要将这些数组用逗号连接到一个字符串中:
foreach ($result as &$value) {
$value['mergethis'] = join(',', $value['mergethis'];
}发布于 2015-06-10 15:10:54
您基本上是在寻找pluck的PHP实现。看看这是PHP版本的要点。
$ids_array = array_pluck("id", $products); // get just he id values
$ids_array = array_unique($ids_array); // remove duplicates
foreach($products as $key => $value){
if (in_array($value->id, $ids_array)) {
//Delete this item and add product_category comma sepereated to first item
//unset($products[$key]);
}
}
function array_pluck ($toPluck, $arr) {
return array_map(function ($item) use ($toPluck) {
return $item[$toPluck];
}, $arr);
}https://stackoverflow.com/questions/30760187
复制相似问题