将多维数组插入另一个多维数组

Posted

技术标签:

【中文标题】将多维数组插入另一个多维数组【英文标题】:Inserting multidimensional array into another multidimensional array 【发布时间】:2019-12-03 22:51:33 【问题描述】:

作为序言,我尝试做的部分工作是将尽可能多的代码隐藏与前端代码分开(主要的 php 函数不在 html 中间以使其更具可读性)。我正在处理的是网站上使用的不同“代码”的“编辑器”样式页面,因此为了让它们准备好在页面上显示,我正在创建一个数组来显示它们,如下所示:

$CodeListing = array(
    array(
        'CodeType' => 1,
        'CodeDesc' => 'Product',
        'CodeShrt' => 'Prod',
        'ResultsView' => Array(),
    ),
    array(
        'CodeType' => 4,
        'CodeDesc' => 'Version',
        'CodeShrt' => 'Vers',
        'ResultsView' => Array(),
    ),
    array(
        'CodeType' => 5,
        'CodeDesc' => 'Applications',
        'CodeShrt' => 'Apps',
        'ResultsView' => Array(),
    ),
    array(
        'CodeType' => 7,
        'CodeDesc' => 'Resellers',
        'CodeShrt' => 'Resell',
        'ResultsView' => Array(),
    ),
    array(
        'CodeType' => 8,
        'CodeDesc' => 'Roles',
        'CodeShrt' => 'Roles',
        'ResultsView' => Array(),
    )
);

所有这些代码都存储在单个 mysql 表中,并由包含 CodeType 和 CodeValue 列的主键唯一标识。我正在尝试做的是使用 foreach 循环使用 MySQL 表中的关联数据填充每个 ResultsView 的值。

所以我在 Stack 上查看了其他几个问题: Inserting a multidimensional array into another multidimensional array

Insert array into multidimensional array

我已尝试按照其中的建议使用 array_push 和 array_merge,但这些方法都不起作用。当我在 foreach 之外执行 print_r 或在 html 端的 ResultsView 上运行 foreach 时,它什么都不返回(基本上看起来像上面一样,没有为任何 ResultsView 键的值定义任何内容。)

目前,我的代码如下:

//Go through each CodeListing and set its ResultView to contain all code entries.
foreach ($CodeListing as $type) 
    //Generate the query
    $query = "SELECT * FROM code WHERE CodeType = '".$type['CodeType']."'";
    //Define order based on CodeType.
    //Certain CodeTypes require a unique sorting.
    if (in_array($type['CodeType'], array('1','6','7','8'))) 
        $query .= " ORDER BY CodeName;";
     else 
        $query .= " ORDER BY CodeField1, CodeValue;";
    
    //Get the results of query
    $result = $db -> select($query);
    //set the value of ResultsView.
    $type['ResultsView'] = $result;

/*
Query results from $db -> select($query) come back in the following format:
[0] => array(
   'CodeType' => SomeValue,
   'CodeValue' => SomeValue,
   'CodeName' => SomeValue,
   'CodeField1' => SomeValue,
   'CodeField2' => SomeValue,
)
[1] => array(
   'CodeType' => SomeValue,
   'CodeValue' => SomeValue1,
   'CodeName' => SomeValue1,
   'CodeField1' => SomeValue1,
   'CodeField2' => SomeValue1, 
)
...
etc.
*/

如上所述,我试图将 MySQL 查询结果数组输入到多维数组中的键值中,但没有任何运气。此外,在当前状态下,我的代码也不会抛出任何错误。

如果我在设置值的 foreach 循环中检查 ResultsView 键的值,当我执行 print_r 时,数组就会显示出来(也告诉我它正在到达我的代码中的 foreach 循环)。在该循环之外,我的代码就像我从未为任何 ResultsView 键分配值一样,我不明白为什么,或者我缺少什么,所以值保持分配状态。

【问题讨论】:

【参考方案1】:

您没有解决正确放置结果的位置。 $type 只存在于您的循环中,它的目的是读取数组而不是写入

您需要在循环中包含数组键并使用它将结果分配给原始数组中的正确位置:

foreach ($CodeListing as $key => $type) 

    // ...

    $CodeListing[$key]['ResultsView'] = $result;

【讨论】:

以上是关于将多维数组插入另一个多维数组的主要内容,如果未能解决你的问题,请参考以下文章

在循环内将数组添加到多维数组

多维数组索引 C++ 中的多维数组

如果数组存在于另一个多维数组中,如何从多维数组中删除该数组? [复制]

将多维php数组插入mysql数据库

PHP高级教程-多维数组

在php中将一维数组转换为多维数组[重复]