PHP foreach:替换嵌套数组中的值

时间:2013-07-23 09:05:58

标签: php arrays

我想将'value2'更改为'My string'。我知道这可以通过使用数组键来实现,但我想知道它是否更清晰。

$nested_array[] = array('value1', 'value2', 'value3');

foreach($nested_array as $values){

    foreach($values as $value){

        if($value == 'value2'){
            $value = 'My string';
        }

    }

}

5 个答案:

答案 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', ), )