在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