我想从此数组中删除空值。
Array(
[0] => Array( [fcmToken] => 123 )
[1] => Array( [fcmToken] => )
[2] => Array( [fcmToken] => 789 )
)
预期结果
Array(
[0] => Array( [fcmToken] => 123 )
[1] => Array( [fcmToken] => 789 )
)
答案 0 :(得分:2)
我们正在使用foreach
来迭代值并使用$value
non-empty $value["fcmToken"]
$result=array();
foreach($array as $key => $value)
{
if(!empty($value["fcmToken"]))
{
$result[]=$value;
}
}
print_r($result);
<强>输出:强>
Array
(
[0] => Array
(
[fcmToken] => dfqVhqdqhpk
)
[1] => Array
(
[fcmToken] => dfgdfhqdqhpk
)
)
答案 1 :(得分:0)
将array_filter
与回调一起使用:
$r = array_filter($array, function($v) { return !empty($v['fcmToken']); });
准确检查null
:
$r = array_filter($array, function($v) { return !is_null($v['fcmToken']); });
答案 2 :(得分:0)
过滤器多维数组的最佳简便单行解决方案,如下所示。
$aryMain = array_filter(array_map('array_filter', $aryMain));
我希望这个解决方案适合你。有关详细信息,请访问以下链接。
答案 3 :(得分:0)
您需要使用array_map
,array_filter
和array_values
来完成此操作。检查以下代码:
$entry = array(
array("fcmToken" => 'dfqVhqdqhpk'),
array("fcmToken" => ''),
array("fcmToken" => 'dfgdfhqdqhpk'),
);
echo "<pre>";
$entry = array_values(array_filter(array_map('array_filter', $entry)));
print_r($entry);
答案 4 :(得分:0)
危险!在处理可能为零的数字(或number-ish)值时,不要相信 empty()!在没有特定过滤参数的情况下使用 array_filter 也是如此(因为此页面上的几个答案正在使用)。
看看你如何得到错误的输出:
糟糕的方法:
$array = array(
array("fcmToken" => '0'),
array("fcmToken" => 123),
array("fcmToken" => ''),
array("fcmToken" => 789),
array("fcmToken" => 0)
);
$result=array(); // note, this line is unnecessary
foreach($array as $key => $value){ // note, $key is unnecessary
if(!empty($value["fcmToken"])){ // this is not a reliable method
$result[]=$value;
}
}
var_export($result);
输出:
array (
0 =>
array (
'fcmToken' => 123,
),
1 =>
array (
'fcmToken' => 789,
),
)
零被吞噬了!
相反,您应该使用strlen()
来检查值:
方法#1:foreach()
foreach($array as $sub){
if(strlen($sub["fcmToken"])){
$result[]=$sub;
}
}
var_export($result);
方法#2:array_filter()
w /匿名函数,array_values()
表示一致性
var_export(array_values(array_filter($array,function($a){return strlen($a['fcmToken']);})));
两种方法的输出:
array (
0 =>
array (
'fcmToken' => '0',
),
1 =>
array (
'fcmToken' => 123,
),
2 =>
array (
'fcmToken' => 789,
),
3 =>
array (
'fcmToken' => 0,
),
)
答案 5 :(得分:0)
使用这个递归函数,它遍历任何子数组并删除所有具有空值的元素。
function removeNullValues ($array) {
foreach ($array as $key => $entry) {
if (is_array($entry)) {
$array[$key] = removeNullValues($entry);
if ($array[$key] === []) {
unset($array[$key]);
}
} else {
if ($entry === null) {
unset($array[$key]);
}
}
}
return $array;
}
答案 6 :(得分:-1)
尝试使用array_map()将过滤器应用于数组中的每个数组。