如何去除多维数组中的空值?
How to remove null values in multi-dimensional array?
我想从此数组中删除空值。
Array(
[0] => Array( [fcmToken] => 123 )
[1] => Array( [fcmToken] => )
[2] => Array( [fcmToken] => 789 )
)
预期结果
Array(
[0] => Array( [fcmToken] => 123 )
[1] => Array( [fcmToken] => 789 )
)
尝试使用 array_map() 将过滤器应用于数组中的每个数组。
使用 array_filter
回调:
$r = array_filter($array, function($v) { return !empty($v['fcmToken']); });
为了准确检查 null
:
$r = array_filter($array, function($v) { return !is_null($v['fcmToken']); });
这里我们使用 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
)
)
过滤器多维数组的最佳简单单行解决方案,如下所示。
$aryMain = array_filter(array_map('array_filter', $aryMain));
希望此解决方案适合您。欲了解更多详情,请访问下方 link.
PHP: remove empty array strings in multidimensional array
您需要使用 array_map
, array_filter
and 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);
Danger! Do not trust empty() when dealing with numbers (or number-ish) values that could be zero!!! The same is true with using array_filter without a specific filtering parameter (as several answers on this page are using).
看看如何得到错误的输出:
错误的方法:
$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,
),
)
使用此递归函数迭代任何子数组并删除所有具有空值的元素。
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;
}
我想从此数组中删除空值。
Array(
[0] => Array( [fcmToken] => 123 )
[1] => Array( [fcmToken] => )
[2] => Array( [fcmToken] => 789 )
)
预期结果
Array(
[0] => Array( [fcmToken] => 123 )
[1] => Array( [fcmToken] => 789 )
)
尝试使用 array_map() 将过滤器应用于数组中的每个数组。
使用 array_filter
回调:
$r = array_filter($array, function($v) { return !empty($v['fcmToken']); });
为了准确检查 null
:
$r = array_filter($array, function($v) { return !is_null($v['fcmToken']); });
这里我们使用 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
)
)
过滤器多维数组的最佳简单单行解决方案,如下所示。
$aryMain = array_filter(array_map('array_filter', $aryMain));
希望此解决方案适合您。欲了解更多详情,请访问下方 link.
PHP: remove empty array strings in multidimensional array
您需要使用 array_map
, array_filter
and 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);
Danger! Do not trust empty() when dealing with numbers (or number-ish) values that could be zero!!! The same is true with using array_filter without a specific filtering parameter (as several answers on this page are using).
看看如何得到错误的输出:
错误的方法:
$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,
),
)
使用此递归函数迭代任何子数组并删除所有具有空值的元素。
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;
}