我有两个数组,我想根据day_of_week
和status
的值比较数组。
如果day_of_week
存在于另一个数组中,并且status
为1,则用匹配的数组替换该数组。
$ array1
Array
(
[0] => Array
(
[id] => 4
[day_of_week] => sun
[description] => sun test description
[status] => 0
[date] => 2019-01-11
)
[1] => Array
(
[id] => 5
[day_of_week] => mon
[description] => mon test description
[status] => 0
[date] => 2019-01-11
)
)
$ array2
Array
(
[0] => Array
(
[id] => 1
[day_of_week] => mon
[description] => mon updated test description
[status] => 1
[date] => 2019-01-11
)
)
所需的输出:
Array
(
[0] => Array
(
[id] => 4
[day_of_week] => sun
[description] => sun test description
[status] => 0
[date] => 2019-01-11
)
[1] => Array
(
[id] => 1
[day_of_week] => mon
[description] => mon updated test description
[status] => 1
[date] => 2019-01-11
)
)
我尝试使用array_intersect
函数,但是找不到基于day_of_week
和status
比较值的解决方案。谁能帮我吗?
$array = array_intersect($array1, $array2);
答案 0 :(得分:2)
似乎可以通过循环完成
$array2 = array_column($array2, null, 'day_of_week');
foreach ($array1 as $k=>$x) {
if (isset($array2[$x['day_of_week']]) and $array2[$x['day_of_week']]['status'] == 1) {
$array1[$k] = $array2[$x['day_of_week']];
}
}
答案 1 :(得分:2)
由于星期几在数组中是唯一的,因此您可以使用array_column()
以此索引两个数组,并可以使用array_replace()
将第二个数组中的数据替换为第一个数组。
另外(感谢splash58),您需要过滤第二个数组以只保留状态为1 ...的数组。
$array2 = array_filter($array2, function($entry) { return $entry['status'] == '1'; });
$array1 = array_column($array1, null, "day_of_week");
$array2 = array_column($array2, null, "day_of_week");
$array1 = array_replace($array1, $array2);
print_r(array_values($array1));
最后使用array_values()
会删除索引,以备不时之需。
答案 2 :(得分:2)
您可以使用array_map
处理$array1
的每个元素,并检查它是否在$array2
中相对应(在day_of_week
列中使用array_search
定位)有status == 1
。如果是这样,请返回$array2
中的元素,否则保留$array1
中的值:
$array1 = array_map(function ($v) use ($array2) {
if (($k = array_search($v['day_of_week'], array_column($array2, 'day_of_week'))) !== false && $array2[$k]['status'] == 1)
return $array2[$k];
else
return $v;
}, $array1);
print_r($array1);
输出:
Array (
[0] => Array ( [id] => 4 [day_of_week] => sun [description] => suntestdescription [status] => 0 [date] => 2019-01-11 )
[1] => Array ( [id] => 1 [day_of_week] => mon [description] => monupdatedtestdescription [status] => 1 [date] => 2019-01-11 )
)