我需要根据'id '的共享值合并一个三维数组和一个二维数组。
在下面的例子中,"George Washington"的"id"为1。我需要附加他的'value',它在第二个数组中找到,其中'id'也是1。
"John Adams"的"id"是2,在第二个数组中没有找到。因此,他的"值"需要设置为0(或NULL)。
最终结果是一个三维数组,其中'value'已添加到原始数组的每一项。
阵列# 1
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[name] => "George Washington"
)
[total] => 8
[average] => 2.5
)
[1] => Array
(
[0] => Array
(
[id] => 2
[name] => "John Adams"
)
[total] => 6
[average] => 3.0
)
[2] => Array
(
[0] => Array
(
[id] => 5
[name] => "James Monroe"
)
[total] => 9
[average] => 2.0
)
)
阵列# 2
Array
(
[0] => Array
(
[id] => 1
[value] => 12
)
[1] => Array
(
[id] => 5
[value] => 18
)
)
期望结果:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[name] => "George Washington"
)
[total] => 8
[average] => 2.5
[value] => 12
)
[1] => Array
(
[0] => Array
(
[id] => 2
[name] => "John Adams"
)
[total] => 6
[average] => 3.0
[value] => 0
)
[2] => Array
(
[0] => Array
(
[id] => 5
[name] => "James Monroe"
)
[total] => 9
[average] => 2.0
[value] => 18
)
)
我已经尝试过了:
我将第一个数组中的所有'id'值分隔成一个名为$ids的新数组。然后,当循环遍历第二个数组中的项时,我检查第二个数组中的'id'是否在$ids数组中找到。
但是我被卡住了,因为我不知道如何指定第一个数组中的哪个项目需要接收新的"值"。此外,由于创建$ids数组所涉及的开销,这似乎是一个混乱的解决方案。
在我写完这篇文章之前,我甚至没有意识到您已经尝试列出了id之类的东西,但无论如何,您还是要这样做。祝你好运!
$array1_size = count($array1);
$array2_size = count($array2);
// Creates a list containing all available IDs of Array1
for ($i = 0; $i < $array1_size; $i ++) {
$id_list[] = $array1[$i][0]['id'];
$array1[$i]['value'] = NULL; // Adds a NULL to all value fields
}
// Loops through Array2
for ($i = 0; $i < $array2_size; $i++) {
if (in_array($array2[$i]['id'], $id_list)) { // Checks if each ID exists in the ID list
$key = array_search($array2[$i]['id'], $id_list); // Gets the key of the matching ID
$array1[$key]['value'] = $array2[$i]['value']; // Adds the value
}
}
Edit:值现在默认设置为NULL,因此只有在需要时才会更改。