基于共享值合并3D数组和2D数组



我需要根据'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,因此只有在需要时才会更改。

相关内容

  • 没有找到相关文章

最新更新