我有一个这样的数组:
$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');
答案 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));