首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较数组中的对象值?

如何比较数组中的对象值?
EN

Stack Overflow用户
提问于 2015-06-10 15:02:15
回答 3查看 90关注 0票数 0

我有一个包含几个对象的数组。

代码语言:javascript
运行
复制
$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的值,然后从数组中取消对象设置。

所以我的预期结果是:

代码语言:javascript
运行
复制
[
{"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并比较值,但我坚持将值与数组的子值进行比较,而不是将其与整个数组进行比较。

代码语言:javascript
运行
复制
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值的新数组,并在此基础上进行迭代?还是有一种比较简单的方法来比较数组中的对象值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-10 15:10:18

提示:使用以id为键的关联数组,以整个产品为值:

代码语言:javascript
运行
复制
$results = array();
foreach ($products as $prod){
    if (array_key_exists($prod['id'], $results)){
        $results[$prod['id']]['mergethis'] .= ',' . $prod['mergethis'];
    } else {
        $results[$prod['id']] = $prod;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-06-10 15:12:36

代码语言:javascript
运行
复制
$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'];
    }
}

这似乎是最明智的做法。如果确实需要将这些数组用逗号连接到一个字符串中:

代码语言:javascript
运行
复制
foreach ($result as &$value) {
    $value['mergethis'] = join(',', $value['mergethis'];
}
票数 1
EN

Stack Overflow用户

发布于 2015-06-10 15:10:54

您基本上是在寻找pluck的PHP实现。看看这是PHP版本的要点

代码语言:javascript
运行
复制
$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); 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30760187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档