基于共享值将3D阵列与2D阵列合并

时间:2011-10-22 01:23:49

标签: php arrays multidimensional-array

我需要根据'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数组所涉及的开销,这似乎是一个混乱的解决方案。

1 个答案:

答案 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,因此只有在需要时才会更改。