关于php:加入数组以进入多维数组

Joining arrays to go in to a multidimensional array

我需要动态地生成数组的子元素,这些是数组本身。因此,最终结果应该是(这是下面代码的简化版本,以便于理解):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Array
(
    [id] => 5000038642
    [name] => TrackVia Legacy Section of Array
    [description] =>
    [table_id] => 5000005024
    [records] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [table_id] => 1
                    [fields] => Array
                        (
                            [Name] => First Item
                        )
                   )
              [1] => Array
                (
                    [id] => 1
                    [table_id] => 1
                    [fields] => Array
                        (
                            [Name] => Second Item
                        )
                   )
        )
)

结果中的嵌套数组是从mysql表动态生成的,因此>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$allItems = array();
    $item = array();

// Get each result and build the arrya
while($row = $resultAvailableBoxes->fetch_assoc()) {

                $item = array (
               "id"=> $row['id'],
               "table_id"=> $row['id'],
               "fields"=> array (
                   "Name"=> $row['box_title'],
                    )
                );

                // Append the arrays on to each other
                $allItems[] = array_merge($allItems, $item);

    }

// Place the arrays within the"parent" array
$completeArray = array(
           "id"=> 1000,
           "name"=>"Sample",
           "description"=>"",
           "table_id"=> 1000,
               "records"=>
                    $allItems

                );

如您所见,在将这些数组放入"父"数组之前,我还尝试将每个新数组附加到最后一个数组。这就是问题发生的地方。

使用该方法

$allItems[] = array_merge($allItems, $item);

我把每个数组都附加到最后一个数组上,但是一次又一次。这样地:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Array
(
    [id] => 5000038642
    [name] => TrackVia Legacy Section of Array
    [description] =>
    [table_id] => 5000005024
    [records] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [table_id] => 1
                    [fields] => Array
                        (
                            [Name] => Texan BBQ 1
                        )

                )

            [1] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [table_id] => 1
                            [fields] => Array
                                (
                                    [Name] => Texan BBQ 1
                                )

                        )

                    [id] => 9
                    [table_id] => 9
                    [fields] => Array
                        (
                            [Name] => Goan Sorpotel with Pea & Mint Pilau and Tomato Chutney
                        )

                )

        )

)

当我有20个项目时,你可以看到这将成为一个巨大的列表,但不起作用。使用该方法

$allItems = array_merge($allItems, $item);

只返回附加的最后一个数组(即,它总是覆盖"allitems"数组中已有的内容)。

我还使用了一种简单的方法,但我不希望它奏效,而且它确实没有:

$allItems .= $item;

我是在阅读了这些叠加流问题之后得出结论的,这些问题看起来是相同的,但并没有,或者给出了奇怪的结果,我肯定是在错误地处理这些问题。这是错误的方法完全停止,还是我遗漏了一些内容来停止不断添加子元素?

追加数组(堆栈溢出)无法在PHP中连接2个数组

我忽略了我在这个问题上看到的其他问题,包括php手册,但是我找不到任何与数组合并更相关的问题。


你为什么不这么做?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$items = array();


while($row = $resultAvailableBoxes->fetch_assoc()) {
    $items[] = array (
       "id"=> $row['id'],
       "table_id"=> $row['id'],
       "fields"=> array (
           "Name"=> $row['box_title'],
            )
        );
}

// Place the arrays within the"parent" array
$completeArray = array(
               "id"=> 1000,
               "name"=>"Sample",
               "description"=>"",
               "table_id"=> 1000,
               "records"=> $items                    
                );

这应该创建一个包含所有项的数组,然后将其添加到$completeArray中。


试着用$allItems[] = $item;代替$allItems[] = array_merge($allItems, $item);