繁体   English   中英

组合2个值匹配的关联数组

[英]combine 2 associative arrays where values match

我有2个关联数组:$ arr1和$ arr2。 我想创建$ arr3,如果日期匹配,它将结合'name'和'character'...如果日期不匹配,那么只是字符:

这是$ arr1:

Array
(
[0] => stdClass Object
    (
        [date] => 2010/01/01
        [name] => Mario Lopez
    )

[1] => stdClass Object
    (
        [date] => 2010/01/02
        [name] => Lark Voorhies
    )

)

这是$ arr2:

Array
(
[0] => Array
    (
        [date] => 2010/01/01
        [character] => AC Slater
    )

[1] => Array
    (
        [date] => 2010/01/02
        [character] => Lisa Turtle
    )
[2] => Array
    (
        [date] => 2010/01/03
        [character] => Kelly Kapowski
    )
)

使用array_intersect会出现以下错误:“类stdClass的对象无法转换为字符串”。

这是我想要的,如果可能的话(即$ arr3):

Array
(
[0] => stdClass Object
    (
        [date] => 2010/01/01
        [name] => Mario Lopez
        [character] => AC Slater
    )

[1] => stdClass Object
    (
        [date] => 2010/01/02
        [name] => Lark Voorhies
        [character] => Lisa Turtle
    )

[2] => stdClass Object
    (
        [date] => 2010/01/03
        [character] => Kelly Kapowski
    )

)

这个功能发布在php.net上,我已经使用了很长一段时间。 它应该做你想要的

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

用法:

$array = array_extend($orig_array,$new_array);

请注意,您必须将对象转换为数组或修改函数以将对象转换为动态数组($ a =(array)$ a);

编辑:

原始来源http://www.php.net/manual/en/function.array-merge.php#95294

请注意,我做了一个小修改来解决给定函数的问题,它不能使用数字键正确扩展数组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM