0

我想将“value2”更改为“我的字符串”。我知道这可以通过使用数组键来实现,但我想知道这是否是一种更清洁的方式。

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

foreach($nested_array as $values){

    foreach($values as $value){

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

    }

}
4

5 回答 5

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.
于 2013-07-23T09:08:00.640 回答
3

您也可以array_walk_recursive为此使用:

array_walk_recursive($nested_array,
                     function(&$v) {
                         if ($v == 'value2') $v = 'My string';
                     }
);

这适用于任何级别的嵌套,之后您无需记住unset任何内容。

于 2013-07-23T09:17:50.513 回答
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 />';

    }

}
于 2013-07-23T09:10:05.540 回答
0

PHP 函数 array_search 就是您要搜索的内容。

$key = array_search('value2', $nested_array);
$nested_array[$key] = 'My String';

此解决方案将比遍历整个数组更高效。

于 2013-07-23T09:10:24.377 回答
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', ), )
于 2013-07-23T09:14:10.417 回答