我想将'value2'更改为'My string'。我知道这可以通过使用数组键来实现,但我想知道它是否更清晰。
$nested_array[] = array('value1', 'value2', 'value3');
foreach($nested_array as $values){
foreach($values as $value){
if($value == 'value2'){
$value = 'My string';
}
}
}
答案 0 :(得分:6)
只需使用引用运算符&
通过引用传递值:
foreach($nested_array as &$values) {
foreach($values as &$value) {
do_something($value);
}
}
unset($values); // These two lines are completely optional, especially when using the loop inside a
unset($value); // small/closed function, but this avoids accidently modifying elements later on.
答案 1 :(得分:2)
您也可以使用array_walk_recursive
:
array_walk_recursive($nested_array,
function(&$v) {
if ($v == 'value2') $v = 'My string';
}
);
这适用于任何级别的嵌套,之后您无需记住unset
任何内容。
答案 2 :(得分:0)
function strReplaceAssoc(array $replace, $subject) {
return str_replace(array_keys($replace), array_values($replace), $subject);
}
$nested_array[] = array('value1', 'value2', 'value3');
foreach($nested_array as $values){
foreach($values as $value){
$replace = array(
'value2' => 'My string'
);
$new_values = strReplaceAssoc($replace,$value);
echo $new_values . '<br />';
}
}
答案 3 :(得分:0)
PHP函数array_search是您要搜索的内容。
$key = array_search('value2', $nested_array);
$nested_array[$key] = 'My String';
这个解决方案比遍历整个数组更有效。
答案 4 :(得分:0)
使用数组键:
$nested_array = array();
$nested_array[] = array('value1', 'value2', 'value3');
foreach($nested_array as $key => $values){
foreach($values as $key2 => $value){
if($value == 'value2'){
$nested_array[$key][$key2] = 'My string';
}
}
}
var_export($nested_array);
// array ( 0 => array ( 0 => 'value1', 1 => 'My string', 2 => 'value3', ), )