dsfo22654 2017-04-13 08:23
浏览 47
已采纳

php - 如果值匹配,则将值附加到数组中的数组

Is there a way, with the two followings arrays to get another array which is the combination of those two arrays?

Array 1:

    Array
(
[0] => Array
    (
        [a_id] => 9
        [name] => Mario Lopez
    )

[1] => Array
    (
        [a_id] => 8
        [name] => Lisa Turtle
    )

)

Array 2:

Array
(
[0] => Array
    (
        [b_id] => 1
        [name] => AC Slater
    )

[1] => Array
    (
        [b_id] => 2
        [name] => Lisa Turtle
    )
[2] => Array
    (
        [b_id] => 3
        [name] => Kelly Kapowski
    )
)

What I would like to get :

    Array
    (
    [0] => Array
        (
            [b_id] => 1
            [name] => AC Slater
        )

    [1] => Array
        (
            [a_id] => 8
            [b_id] => 2
            [name] => Lisa Turtle
        )
    [2] => Array
        (
            [b_id] => 3
            [name] => Kelly Kapowski
        )
     [3] => Array
        (
            [a_id] => 9
            [name] => Mario Lopez
        )
    )

The third array merges the two first arrays where the key name matches I have not found a builtin function and tried this solution without success: combine 2 associative arrays where values match.

Thank you,

Edit: sorry, I forgot to add Mario Lopez. My attempt was:

function array_extend($a, $b) {
    foreach($b as $k=>$v) {
        if( is_array($v) ) {
            if( !isset($a[$k]) OR isset($v[0])) {
                $a[$k] = $v;
            } else {
                $a[$k] = array_extend($a[$k], $v);
            }
        } else {
            $a[$k] = $v;
        }
    }
    return $a;
}
  • 写回答

1条回答 默认 最新

  • dongyu5104 2017-04-13 08:51
    关注

    This probably is what you are looking for, although as @OldPadawan already pointed out in the comments to the question the actual result differs from the proposed one...

    <?php
    $a = [
        [
            'a_id' => 9,
            'name' => 'Mario Lopez'
        ],
        [
            'a_id' => 8,
            'name' => 'Lisa Turtle'
        ]
    ];
    $b = [
        [
            'b_id' => 1,
            'name' => 'AC Slater'
        ],
        [
            'b_id' => 2,
            'name' => 'Lisa Turtle'
        ],
        [
            'b_id' => 3,
            'name' => 'Kelly Kapowski'
        ]
    ];
    $c = $a;
    array_walk($b, function($be) use (&$c) {
        $done = false;
        array_walk($c, function(&$ce) use($be, &$done) {
            if ($ce['name'] == $be['name']) {
                $ce['b_id'] = $be['b_id'];
                $done = true;
            }
        });
        if ( ! $done) {
            array_push($c, $be);
        }
    });
    print_r($c);
    

    The output of above code is:

    Array
    (
        [0] => Array
            (
                [a_id] => 9
                [name] => Mario Lopez
            )
    
        [1] => Array
            (
                [a_id] => 8
                [name] => Lisa Turtle
                [b_id] => 2
            )
    
        [2] => Array
            (
                [b_id] => 1
                [name] => AC Slater
            )
    
        [3] => Array
            (
                [b_id] => 3
                [name] => Kelly Kapowski
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?