首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按共享键合并多维数组值

按共享键合并多维数组值
EN

Stack Overflow用户
提问于 2018-05-23 15:42:16
回答 2查看 80关注 0票数 0

在PHP中使用单个数组时,我希望合并为with,并且能够这样做,但是只有1次返回,其中应该有2。

下面是原始数组和新数组。

代码语言:javascript
运行
复制
    id LIKE 'fghij' OR id LIKE 'abcde' 

   $orig = Array
    (
        [0] => Array
            (
                [id] => abcde
                [field2] => height
                [value2] => 40 ft.
            )

        [1] => Array
            (
                [id] => abcde
                [field3] => width
                [value3] => 10-15 ft.
            )

        [2] => Array
            (
                [id] => abcde
                [field4] => light
                [value4] => Full - Partial
            )

        [3] => Array
            (
                [id] => abcde
                [field6] => space
                [value6] => 5-6 ft.
            )

        [4] => Array
            (
                [id] => fghij
                [field2] => height
                [value2] => 4-8 ft.
            )

        [5] => Array
            (
                [id] => fghij
                [field3] => width
                [value3] => 3-4 ft.
            )

        [6] => Array
            (
                [id] => fghij
                [field4] => light
                [value4] => Full - Partial
            )

        [7] => Array
            (
                [id] => fghij
                [field5] => season
                [value5] => Spring
            )

        [8] => Array
            (
                [id] => fghij
                [field6] => space
                [value6] => 4 ft.
            )

        [9] => Array
            (
                [id] => fghij
                [field19] => restricted
                [value19] => CA, TX, LA, FL, AZ
            )

        [10] => Array
            (
                [id] => abcde
                [field19] => restricted
                [value19] => AZ
            )

    )
   $new = Array
    (
        [id] => abcde
        [field2] => height
        [value2] => 4-8 ft.
        [field3] => width
        [value3] => 3-4 ft.
        [field4] => light
        [value4] => Full - Partial
        [field6] => space
        [value6] => 4 ft.
        [field5] => season
        [value5] => Spring
        [field19] => restricted
        [value19] => AZ
    )

$new几乎是正确的,但它忽略了与fghij相关的所有内容,返回了一个扁平数组。我希望它用合并的值返回两个id。

这就是我的代码智慧的地方:

代码语言:javascript
运行
复制
$new_new = [];
foreach($orig as $key => $value){
  if(is_array($value)){
    $new_new = array_merge($new_new, $value);
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-23 16:26:13

您需要为每个唯一的id积累条目。

代码语言:javascript
运行
复制
function mergeByKey($array,$key){
    $result = [];
    foreach($array as $entry){
        $is_new = true;
        foreach($result as &$result_entry){
            if($result_entry[$key]==$entry[$key]){
                $is_new = false;
                $result_entry = array_merge($result_entry,$entry);
                break;
            }
        }
        if($is_new)
            $result[] = $entry;
    }
    return $result;
}

$new_new = mergeByKey($orig,'id');
票数 1
EN

Stack Overflow用户

发布于 2018-05-23 16:10:24

可能像这样对你有用吗?您可以为$value‘’id‘添加其他检查。

代码语言:javascript
运行
复制
$new = [];
foreach($arr as $key => $value){
  if(is_array($value)){
    if( !array_key_exists($value['id'],$new) ){
        $new[$value['id']] = [];
    }  
    $new[$value['id']] = array_merge($new[$value['id']], $value );
  }
} 

我改变了我的算法,现在正如我所期望的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50492498

复制
相关文章

相似问题

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