3

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

// 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)在循环内部执行时,它似乎正在工作(将行附加到现有数据),但是在循环外部检查它会使循环看起来对数组没有影响。

谢谢

4

2 回答 2

6

您需要传递$filter_valueas 引用(带有前导&)而不是副本。

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

文档

为了能够直接修改循环内的数组元素,在 $value 之前加上 &。在这种情况下,该值将通过引用分配。

于 2013-05-05T16:09:54.707 回答
0

如果我理解正确 - 在下面的代码中,您只是将值分配给 $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;
于 2013-05-05T16:10:37.700 回答