在PHP中搜索并替换数组中键的值
问题描述:
Let's say I have an array like this:
$myArray = array(
'a' => 'alpha',
'b' => array(
'Z' => 'zulu' )
);
I'd like to search for the key 'Z' and replace its value.
I've tried iterators, foreach loops, etc but no luck.
* Amended syntax.
假设我有一个这样的数组: p>
$ myArray = array(
'a'=>'alpha',
'b'=> array(
'Z'=>'zulu')
);
code> pre>
我想搜索键'Z'并替换它的值。 p>
我尝试了迭代器,foreach循环等但没有运气 。 p>
* em>修改后的语法。 p>
div>
答
You can pass a reference to array_walk_recursive:
$myArray = array(
'a' => 'alpha',
'b' => array(
'Z' => 'zulu' )
);
$newvalue = 'zebra';
array_walk_recursive($myArray, function(&$value, $key) use($newvalue){
if($key=='Z'){
$value = $newvalue;
}
});
print_r($myArray);
example: http://codepad.viper-7.com/ajsYEn
答
<?php
$myArray = array(
'a' => 'alpha',
'b' => array (
'Z' => 'zulu'
),
);
foreach($myArray as $key => $value) {
if (is_array($value)) {
foreach($value as $k => $v) {
if ($k == 'Z')
{
//do something
$myArray[$key]['newKey'] = $v;
unset($myArray[$key][$k]);
}
}
}
}
print_r($myArray);
Output:
Array
(
[a] => alpha
[b] => Array
(
[newKey] => zulu
)
)
答
You can use array_walk_recursive
and pass by reference:
array_walk_recursive($myArray, function(&$item, $key) {
if ($key == 'Z') $item = "hi";
});
http://sandbox.onlinephpfunctions.com/code/ad750cbb5b30b87f9e6068ba15420cf924ed5a7b