【问题标题】:How can I get the new array after unset?取消设置后如何获取新数组?
【发布时间】:2021-04-16 15:15:59
【问题描述】:

我解码了 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 result

【问题讨论】:

  • 这是一个递归操作,所以它当然会在每次调用中显示一个转储。如果要更改原始数组,则需要通过引用传递它,因为函数使用副本,而不是原始数组。

标签: php arrays json


【解决方案1】:

定义函数以通过引用 & 传递 $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);

【讨论】:

  • 我尝试了您的解决方案,但没有成功。它给了我原始数组。
  • 抱歉,在循环中忘记了&$value3v4l.org/mPorI
  • 太棒了。谢啦。但是你能解释一下为什么我们使用“&$value”吗?因为 $array 已经像 "&$array" 一样作为参考。顺便谢谢你。
  • foreach 复制数组并循环它,因此当您递归传递 $value 时,它不会修改原始数组。使用引用更新原始数组。
猜你喜欢
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2011-06-07
  • 2012-08-11
  • 2021-07-15
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多