【问题标题】:php - append value to array from array if values matchesphp - 如果值匹配,则将值从数组附加到数组
【发布时间】:2017-04-13 08:23:19
【问题描述】:

有没有办法,用下面的两个数组得到另一个数组,它是这两个数组的组合?

数组 1:

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

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

)

数组 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
    )
)

我想得到什么:

    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
        )
    )

第三个数组合并了键名匹配的前两个数组 我还没有找到builtin function 并尝试了这个解决方案但没有成功:combine 2 associative arrays where values match

谢谢,

编辑:抱歉,我忘记添加 Mario Lopez。 我的尝试是:

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;
}

【问题讨论】:

  • “尝试了这个解决方案但没有成功”是什么意思?请展示您的尝试并解释它有什么问题。谢谢。
  • Mario Lopez 会变成哪里?

标签: php arrays


【解决方案1】:

这可能是您正在寻找的,尽管正如@OldPadawan 已经在 cmets 中指出的那样,实际结果与建议的结果不同......

<?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);

上面代码的输出是:

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
        )

)

【讨论】:

  • 谢谢你。我确实犯了一个错误。
猜你喜欢
  • 2018-08-03
  • 2021-12-31
  • 1970-01-01
  • 2019-08-30
  • 2016-07-08
  • 2018-03-08
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
相关资源
最近更新 更多