考虑下面的数组,如何取消设置具有空值的键1到7的子数组。我似乎无法在脑海中想象如何迭代它,或者是否有一个已经处理它的功能。
$x = array(
(int) 1 => array(
'name' => 'Platemaking',
(int) 1 => null,
(int) 2 => null,
(int) 3 => null,
(int) 4 => null,
(int) 5 => null,
(int) 6 => null,
(int) 7 => null
),
(int) 2 => array(
'name' => 'Digital Printing',
(int) 1 => null,
(int) 2 => '40.0%',
(int) 3 => null,
(int) 4 => null,
(int) 5 => null,
(int) 6 => null,
(int) 7 => null
),
);
例如,$x
在这种情况下应该只有一个元素,即子数组索引2
预期结果如下:
$x = array(
(int) 2 => array(
'name' => 'Digital Printing',
(int) 1 => null,
(int) 2 => '40.0%',
(int) 3 => null,
(int) 4 => null,
(int) 5 => null,
(int) 6 => null,
(int) 7 => null
),
);
答案 0 :(得分:1)
仅获取至少一个元素不为NULL的项目
$result = array_filter($x, function($val) { unset($val['name']); return array_filter($val);});
print_r($result);
<强>更新强> 如果听deceze,请做另一个版本
$result = array_filter($x, function($val) {
return array_filter(array_intersect_key($val, array_flip(range(1,7))));});
print_r($result);
答案 1 :(得分:0)
$x = array_filter($x, function (array $sub) {
return array_reduce(range(1, 7), function ($notEmpty, $i) use ($sub) {
return $notEmpty || $sub[$i] !== null;
});
});
array_filter
决定保留阵列还是丢弃它;回调返回任何键1
到7
是否为空(如果不是空保持,否则丢弃),它通过reduce
中的range(1, 7)
键来执行此操作一个布尔值,取决于它们中的任何一个是!== null
。
答案 2 :(得分:-1)
如果你的数组格式没有改变:
ANo | Code |Type | Date1 | EX_Date|Rd_Date |CPS | Tax
______|_______| _____|______ |_ ______|_______ |____|__________
B1 | AM | T |4/1/2014|3/2/2012|4/2/2010| 99 | 1
B1 | AM | T |5/2/2014|3/5/2012|4/2/2010| 99 | 1
foreach迭代数组by reference和array_filter没有回调将消除&#34; falsey&#34;值
答案 3 :(得分:-1)
找到了一个相当粗糙的解决方案,但它确实有效
$result = array();
foreach ($tmp as $k => $v){
$i = 0;
if(!((empty($v[++$i]))&&(empty($v[++$i])) && (empty($v[++$i])) && (empty($v[++$i]))&&(empty($v[++$i])) && (empty($v[++$i])) &&
(empty($v[++$i])))){
$result[$k] = $v;
}
}
return $result;