如何在多维php数组中替换所有出现的值?

时间:2015-03-20 07:06:58

标签: php recursion

我如何更换任何值的出现" FOO"用" BAR"在嵌套/多维php数组?在我的例子中,我试图用字符串" NAN"替换NAN(而不是数字)值,但是应该适用相同的原则。我的不完整示例代码:

function replaceNan($data)
{
    // probably some recursion here?
}

$data = [
    'foo' => NAN,
    'bar' => [
        'one' => 1,
        'nan' => NAN
    ],
    'baz' => 'BAZ'    
];

$data = replaceNan($data);
var_dump($data);

除非有一个核心的php函数会有所帮助,否则我会假设涉及递归,但我现在无法解决这个问题。任何帮助表示赞赏。

修改:为了清楚起见,在我的示例中,我希望修改$data,使其看起来像:

[
    'foo' => "NAN",
    'bar' => [
        'one' => 1,
        'nan' => "NAN"
    ],
    'baz' => 'BAZ'    
]

2 个答案:

答案 0 :(得分:1)

怎么样

function replace_nan(&$ary) {
    foreach($ary as &$item) {
        if(is_double($item) && is_nan($item))
            $item = "NAN";
        else if(is_array($item))
            replace_nan($item);
    }
}

数组通过引用传递并在适当位置进行修改:

$data = [...];
replace_nan($data);
var_dump($data);

答案 1 :(得分:0)

这对我有用:

 function replace_nan($a){
    foreach($a as $key1 => $array1){
         if(!is_array($array1)){
            if(!is_string($array1) && is_nan($array1)){
                $a[$key1] = "NAN";
            }
        }else{
            $a[$key1] = replace_nan($array1);
        }
    }
    return $a;
}

var_dump(replace_nan($data));

收率:

array (size=3)
  'foo' => string 'NAN' (length=3)
  'bar' => 
    array (size=2)
      'one' => int 1
      'nan' => string 'NAN' (length=3)
  'baz' => string 'BAZ' (length=3)