在foreach循环中追加数组的方法的比较

Ben*_*Ben 3 php arrays foreach loops multidimensional-array

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

// 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') )
                           );
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么这样有效:

// 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');
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

// Add 'All' option to the top of each filter dropdown 
foreach($results['filters'] as $filter_key => $filter_value) {
    $filter_value[] = array('name' => 'All');
}
Run Code Online (Sandbox Code Playgroud)

当我print_r($results)在循环中执行它似乎正在工作(将行附加到现有数据),但在循环外检查它使得看起来循环对数组没有影响.

谢谢

Ray*_*yne 6

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

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

文件:

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