Php foreach循环中附加数组方法的比较

Php foreach循环中附加数组方法的比较,php,arrays,loops,multidimensional-array,foreach,Php,Arrays,Loops,Multidimensional Array,Foreach,我已经设置了一个关联数组(带有虚拟数据用于测试),如下所示: // To hold dropdown filter options $results['filters'] = array('Client' => array( array('a' => '1') ), 'Project' => array( array('b' => '2') ), 'Statu

我已经设置了一个关联数组(带有虚拟数据用于测试),如下所示:

// To hold dropdown filter options
$results['filters'] = array('Client' => array( array('a' => '1') ),
                            'Project' => array( array('b' => '2') ), 
                            'Status' => array( array('c' => '3') ), 
                            'User' => array( array('d' => '4') )
                           );
$newResults = array();
foreach($results['filters'] as $filter_key => $filter_value) {
    $newResults[$filter_key] = array('name' => 'All');
}
$results['filters'] = $newResults;
谁能告诉我为什么这样做:

// Add 'All' option to the top of each filter dropdown 
foreach($results['filters'] as $filter_key => $filter_value) {
    $results['filters'][$filter_key][] = array('name' => 'All');
}
但这并不是:

// Add 'All' option to the top of each filter dropdown 
foreach($results['filters'] as $filter_key => $filter_value) {
    $filter_value[] = array('name' => 'All');
}
当我在循环内部执行
print\r($results)
时,它似乎在工作(将行附加到现有数据),但在循环外部检查它会使循环看起来对数组没有影响


谢谢

您需要传递
$filter\u值
作为参考(带前导的
&
)而不是副本

foreach($results['filters'] as $filter_key => &$filter_value) {
    $filter_value[] = array('name' => 'All');
}
:

以便能够直接修改循环中的数组元素 在$value前面加上&。在这种情况下,该值将由 参考资料


如果我理解正确-在下面的代码中,您只是将值赋给$filter\u值,而不是其父数组:

// Add 'All' option to the top of each filter dropdown 
foreach($results['filters'] as $filter_key => $filter_value) {
    $filter_value[] = array('name' => 'All');
}
你可以这样做:

// To hold dropdown filter options
$results['filters'] = array('Client' => array( array('a' => '1') ),
                            'Project' => array( array('b' => '2') ), 
                            'Status' => array( array('c' => '3') ), 
                            'User' => array( array('d' => '4') )
                           );
$newResults = array();
foreach($results['filters'] as $filter_key => $filter_value) {
    $newResults[$filter_key] = array('name' => 'All');
}
$results['filters'] = $newResults;

啊,谢谢你的快速回答,现在这很有道理了。我很惊讶我以前从未遇到过这样的事情。