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

时间:2019-07-25 15:36:55

标签: php arrays multidimensional-array

作为序言,我正在尝试做的部分工作是将尽可能多的后台代码与前端代码分开(主要的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的值。

所以我在堆栈上看了几个其他问题: 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 个答案:

答案 0 :(得分:1)

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

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

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

    // ...

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