递归替换多维数组中每次出现的特定键的值

问题描述 投票:0回答:2

我有一个数组,它的数组深度可以不同,例如:

array(
  'one' => array(
     array(
        'something' => 'value'
     ),
     array(
        'something2' => 'value2'
     ),
     'another' => 'anothervalue'
  ),
  'two' =>  array(
     array(
        'something' => 'value'
     ),
     array(
        'something2' => 'value2'
     ),
     'another' => 'anothervalue'
  )
)

现在,假设我想用键“something”替换所有内容。

我需要使用递归函数来遍历数组吗?或者有更好的方法吗?

php arrays recursion multidimensional-array
2个回答
10
投票

看看

array_walk_recursive
。在这种情况下它可能非常方便。

这是一个使用 array_walk_recursive 的例子:

$arr = array(
      'one' => array(
            array('something' => 'value'),
            array('something2' => 'value2'),
            'another' => 'anothervalue'
            ),
      'two' =>  array(
            array('something' => 'value'),
            array('something2' => 'value2'),
            'another' => 'anothervalue'
            )
       );

function update_something(&$item, $key)
{
    if($key == 'something')
        $item = 'newValue';
}

array_walk_recursive($arr, 'update_something');

如果在类中使用,回调方法必须将对象与函数一起添加。这是通过数组实现的:

array_walk_recursive($arr, array($this, 'update_something'));

2
投票

这是一个函数,您可以将其用作全局函数,也可以将其放入类中:

/**
 * replace any value in $array specified by $key with $value
 *
 * @return array array with replaced values
 */
function replace_recursive(Array $array, $key, $value)
{
    array_walk_recursive($array, function(&$v, $k) use ($key, $value)
        {$k == $key && $v = $value;});
    return $array;
}

# usage:
$array = replace_recursive($array, 'something', 'replaced');

它也利用了

array_walk_recursive
但是被封装了。 key 和 value 可以指定为函数参数,而不是在某些回调中进行硬编码,因此更加灵活。

© www.soinside.com 2019 - 2024. All rights reserved.