【发布时间】:2013-11-08 06:29:48
【问题描述】:
我在按特定场景合并数组时遇到了麻烦。搜索类似的案例在这里没有结果。要清楚地了解我的要求是什么,请看下一个示例:
第一个数组:
Array
(
[0] => stdClass
(
[call_date] => 2013-10-22 00:00:00
[first_amount] => 10
)
[1] => stdClass
(
[call_date] => 2013-10-23 00:00:00
[first_amount] => 20
)
)
第二个数组:
Array
(
[0] => stdClass
(
[call_date] => 2013-10-22 00:00:00
[second_amount] => 30
)
[1] => stdClass
(
[call_date] => 2013-10-24 00:00:00
[second_amount] => 40
)
)
我在输出中需要什么:
Array
(
[0] => stdClass
(
[call_date] => 2013-10-22 00:00:00
[first_amount] => 10
[second_amount] => 30
)
[1] => stdClass
(
[call_date] => 2013-10-23 00:00:00
[first_amount] => 20
)
[2] => stdClass
(
[call_date] => 2013-10-24 00:00:00
[second_amount] => 40
)
)
如您所见,合并按 call_date 进行。合并第一个和第二个数组中日期为 2013-10-22 00:00:00 的项目,添加第二个数组中日期为 2013-10-24 00:00:00 的项目。
尝试了很多array_merge、array_udiff、array_merge_recursive、array_map的组合,但没有任何帮助:(。
感谢您解决这个问题!
【问题讨论】:
-
每个都有一个测试条件? php.net/manual/en/control-structures.foreach.php 。所有这些功能都只是 foreach。
-
数组函数在这里不会特别有用——因为数组中没有数组,而是对象。因此,您必须将属性附加到现有对象或创建一个新对象,无论您的第一个数组中是否已经存在具有 call_date 的对象。
-
只是一个
foreach,使用call_date作为新数组的键,如果一个项目不存在,添加,如果存在,添加*_amount列(或者只是@987654328 @ (你说的是合并 object 这里。 -
@Remi,感谢您的回答。那么使用 foreach 的最佳方式是什么?我应该使用嵌套的 foreach-s 吗?
-
不,对于要添加到其中的每个数组,只需连续 1 个 foreach。(所以
foreach($array1 as $item){..}foreach($array2 as $item){..}等)