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

时间:2011-01-16 04:18:01

标签: php

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

)

1 个答案:

答案 0 :(得分:4)

此功能发布在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

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