如何跟踪嵌套数组的所有项?

时间:2017-03-13 10:51:07

标签: php arrays function

我有一个这样的数组:

$arr = array(
             0 => array (0 => null, 1=> 'something1'),
             1 => array (0 => null, 1=> null, 2 => 'something2'),
             2 => null
            );

我需要取消设置所有null值的项目。所以这是预期的结果:

$arr = array(
             0 => array (1=> 'something1'),
             1 => array (2 => 'something2'),
            );

我该怎么做?

这是我到目前为止所尝试的内容:

function trace_arr(&$arr){
    foreach($arr as $item){
        if ( $item == null ) { 
            unset($item);
        } 
    }
}

array_walk($arr, 'trace_arr');

4 个答案:

答案 0 :(得分:3)

试试这个PHP代码:

function remove_null_values(&$array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            remove_null_values($array[$key]);
        }
        elseif($value === null) unset($array[$key]); 
    }
}

remove_null_values($arr);

答案 1 :(得分:1)

如果您使用稳定数组,则可以使用$('#full_name').keyup(function(){ $('#last_name').val(this.value); });

基本示例

array_filter()

结果

  

阵   (
      1 => something1
  )
  排列   (
      [2] => something2
  )

除非您使用数据库或包含来自不稳定文件或来源的数据并且您想要(完整结帐功能),否则请参阅@Mircea评论:here

答案 2 :(得分:0)

这里是一个递归数组过滤函数:

<?php  
$arr = array(
             0 => array (0 => null, 1=> 'something1'),
             1 => array (0 => null, 1=> null, 2 => 'something2'),
             2 => null
            );

function array_filter_recursive(&$array,$callback=null){
    $array = array_filter($array,$callback);
    foreach($array as &$v){
        if(is_array($v)){
           array_filter_recursive($v,$callback);
        }        
    }
}
array_filter_recursive($arr,function($a){ return !is_null($a);});
print_r($arr);

答案 3 :(得分:0)

完成此任务的替代实现:

$array = array(
    0 => array (0 => null, 1=> 'something1'),
    1 => array (0 => null, 1=> null, 2 => 'something2', 3 => array(0 => null, 1 => 'f')),
    2 => null
);


function filterNulls($array, &$list = []) {
    array_walk($array, function ($value, $key) use (&$list) {
        if (!is_array($value)) {
            if (!empty($value)) {
                $list[$key] = $value;
            }
        } else {
            $list[$key] = filterNulls($value);
        }
    });

    return $list;
}

print_r(filterNulls($array));

实时样本:https://3v4l.org/IDdYD