[英]php merge two arrays
我有兩個 arrays 我想合並但遵循某些條件。
$wt = [
['time' =>'07:00'],
['time' =>'07:30'],
['time' =>'08:00'],
['time' =>'08:30'],
['time' =>'09:00'],
['time' =>'09:30'],
];
$tasks = [
['time' => '07:30', 'name' => 'john'],
['time' => '08:00', 'name' => 'fred'],
];
所需的結果應如下所示:
$full = [
['time' => '07:00', 'name' => null],
['time' => '07:30', 'name' => 'john'],
['time' => '08:00', 'name' => 'fred'],
['time' => '08:30', 'name' => null],
['time' => '09:00', 'name' => null],
['time' => '09:30', 'name' => null],
];
我在循環,但我在某處犯了錯誤。
$full = []; // this is the merge array
foreach ($wt as $k => $item) {
$full[$k]['time'] = $item['time'];
foreach ($tasks as $task) {
if($item['time'] == $task['time']) {
$full[$k]['name'] = $task['name'];
} else {
$full[$k]['name'] = null;
}
}
}
這是我的錯誤結果...
Array
(
[0] => Array
(
[time] => 07:00
[name] =>
)
[1] => Array
(
[time] => 07:30
[name] =>
)
[2] => Array
(
[time] => 08:00
[name] => fred
)
[3] => Array
(
[time] => 08:30
[name] =>
)
[4] => Array
(
[time] => 09:00
[name] =>
)
[5] => Array
(
[time] => 09:30
[name] =>
)
)
我正在失去“約翰”
應該這樣做,以便用第二個陣列檢測第一個陣列。 因此,通過從第一個匹配時間,用名稱填充數組“完整”。 否則,應留空。
任何人都可以幫忙嗎? 謝謝你。
這里發生的事情是因為即使您首先匹配結果也繼續循環,然后在其他迭代中您只是將已經匹配的結果歸零:
foreach ($tasks as $task) {
if($item['time'] == $task['time']) {
$full[$k]['name'] = $task['name'];
} else {
$full[$k]['name'] = null;
}
}
如果要調試它:
如果您的第二個數組中有第三個項目,那么您也丟失了第二個項目,因此只需在匹配一個值后添加 break 即可。
foreach ($tasks as $task) {
if($item['time'] == $task['time']) {
$full[$k]['name'] = $task['name'];
break;
}
$full[$k]['name'] = null;
}
也就是說,我想建議更優雅的方式來做到這一點:
$wt = [
['time' =>'07:00'],
['time' =>'07:30'],
['time' =>'08:00'],
['time' =>'08:30'],
['time' =>'09:00'],
['time' =>'09:30'],
];
$tasks = [
['time' => '07:30', 'name' => 'john'],
['time' => '08:00', 'name' => 'fred'],
];
$tasks_time_values = array_column($tasks, 'time');
$tasks_name_values = array_column($tasks, 'name');
$new_tasks = array_combine($tasks_time_values, $tasks_name_values);
print_r($new_tasks);
$full = array_map(function ($w) use ($new_tasks) {
$w['name'] = $new_tasks[$w['time']] ?? null;
return $w;
}, $wt);
print_r($full);
輸出:
Array
(
[07:30] => john
[08:00] => fred
)
Array
(
[0] => Array
(
[time] => 07:00
[name] =>
)
[1] => Array
(
[time] => 07:30
[name] => john
)
[2] => Array
(
[time] => 08:00
[name] => fred
)
[3] => Array
(
[time] => 08:30
[name] =>
)
[4] => Array
(
[time] => 09:00
[name] =>
)
[5] => Array
(
[time] => 09:30
[name] =>
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.