我需要根据'id'的共享值将三维数组与二维数组合并。
在下面的示例中,“George Washington”的“id”为1.我需要附加他的“值”,该值可以在第二个数组中找到,其中“id”也是1。
“John Adams”的'id'是2,在第二个数组中找不到。因此,他的'value'需要设置为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的新数组。然后在循环遍历第二个数组中的项时,我检查是否在$ ids数组中找到第二个数组中的'id'。
但后来我被卡住了,因为我不知道如何指定第一个数组中的哪个项目需要接收新的'value'。此外,由于创建$ ids数组所涉及的开销,这似乎是一个混乱的解决方案。
答案 0 :(得分:1)
在我写完这篇文章之前,甚至没有意识到你曾试图列出身份证等等,但无论如何你要去。 祝你好运!
$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
}
}
编辑:默认情况下,值现在设置为NULL,因此只有在需要时才会更改。