繁体   English   中英

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

[英]How do I replace all occurances of a value in a multidimensional php array?

在嵌套/多维php数组中,如何将出现的值“ FOO”替换为“ BAR”? 就我而言,我试图用字符串“ 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'    
]

怎么样

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);

这对我有用:

 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM