Php 取消设置后如何获取新阵列?

Php 取消设置后如何获取新阵列?,php,arrays,json,Php,Arrays,Json,我解码了json数组。并从数组中取消设置“N/A、、-”。当我打印数组时,它会显示未设置的结果和以前的原始数组。我只需要一个未设置的数组。如何返回此新数组 $root_arr = json_decode($data, true); function array_depth(array $array) { foreach ($array as $key => $value) { if (is_array($value)) { array_de

我解码了json数组。并从数组中取消设置“N/A、、-”。当我打印数组时,它会显示未设置的结果和以前的原始数组。我只需要一个未设置的数组。如何返回此新数组

$root_arr = json_decode($data, true);

  function array_depth(array $array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
          array_depth($value);
        }else{
          if(($value == "-") || ($value == "") || ($value == "N/A")){
            unset($array[$key]);
          }

        }
    }

   print_r(array_values($array));
   //return $array;
  }

array_depth($root_arr);
这就是结果:

通过引用
&
定义传递
$array
的函数,并且不返回任何内容。 另外,将
$value
作为参考公开,以便对其进行更新:

function array_depth(array &$array) {
    foreach ($array as $key => &$value) {
        if (is_array($value)) {
            array_depth($value);
        } else {
            if(($value == "-") || ($value == "") || ($value == "N/A")){
                unset($array[$key]);
            }
        }
    }
}

array_depth($root_arr);
print_r($root_arr);

这是一个递归操作,因此它当然会在每个调用中显示一个转储。如果你想改变原始数组,你需要通过引用来传递它,因为函数使用的是副本,而不是原始数组。它给了我原始数组。对不起,在循环中忘记了
和$value
。令人惊叹的。谢谢你,伙计。但是你能解释一下为什么我们使用“&$value”吗。因为$array已经像“&$array”一样作为引用了。顺便说一句,谢谢。
foreach
复制数组并循环,因此当您递归传递
$value
时,它不会修改原始数组。使用引用更新原始数组。