我已经设置了一个关联数组数组(使用虚拟数据进行测试),如下所示:
// 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') )
);
谁能告诉我为什么这是有效的:
// 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_value
作为参考(带有前导&
)而不是副本。
foreach($results['filters'] as $filter_key => &$filter_value) {
$filter_value[] = array('name' => 'All');
}
文档:
为了能够在循环中直接修改数组元素$value前面加&在这种情况下,值将由参考。
如果我理解正确的话-在下面的代码中,您只是将值赋给$filter_value而不是它的父数组:
// Add 'All' option to the top of each filter dropdown
foreach($results['filters'] as $filter_key => $filter_value) {
$filter_value[] = array('name' => 'All');
}
你可以这样做:
$newResults = array();
foreach($results['filters'] as $filter_key => $filter_value) {
$newResults[$filter_key] = array('name' => 'All');
}
$results['filters'] = $newResults;