【问题标题】:combine 2 associative arrays where values match组合值匹配的 2 个关联数组
【发布时间】:2011-01-16 04:18:00
【问题描述】:

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

这里是 $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


【解决方案1】:

这个函数发布在 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

请注意,我做了一个小的修改,以解决给定函数无法正确扩展带有数字键的数组的问题

【讨论】:

  • 谢谢。 $array = array_extend($orig_array,$new_array);.....你的意思是:$array = array_extend($arr1,$arr2) ?
  • 变量的命名无关紧要 :P 我的只是一个例子,调用变量 $arr1, $arr2 不会有任何区别 :)
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多