PHP - 从数组中删除空值[重复]
Posted
技术标签:
【中文标题】PHP - 从数组中删除空值[重复]【英文标题】:PHP - remove empty values from array [duplicate] 【发布时间】:2013-07-25 23:39:39 【问题描述】:当前数组:
Array (
[name] => Array (
[name1] => Array (
[0] => some value1
)
[name2] => Array (
[0] => some value2
)
[name3] => Array (
[0] =>
)
)
想要的数组:
Array (
[name] => Array (
[name1] => Array (
[0] => some value1
)
[name2] => Array (
[0] => some value2
)
)
由于name3[0]
不包含任何值,因此需要将其删除。
根据我阅读的内容,我应该为此使用array_filter
,但我无法让它工作。
【问题讨论】:
为什么你的数据结构是这样的?为什么不简单的$names = [['name' => 'Jon'], ...]
简单解决方案:***.com/a/66004034/7186739
【参考方案1】:
您需要为array_filter
提供一个谓词(函数),该谓词(函数)确定每个数组元素的[0]
子元素是否为空。所以:
$array = array_filter($array, function($item) return !empty($item[0]); );
请注意empty
不是很挑剔:它会导致删除任何[0]
子元素为空字符串、false
、null
、0
或"0"
的项目--它还将删除根本没有 [0]
子元素的项目。如果您需要更有针对性的手术,则需要对测试进行微调。
【讨论】:
$array
在您的示例中需要为 $array['name']
如果使用 OP 的原始数组
@AlexP:当然。不过,我不确定这是否值得编辑。【参考方案2】:
可以使用递归函数来完成:
$arr = array('test', array('',0,'test'), array('',''));
print_r(clean_array($arr));
function clean_array($array, $isRepeat = false)
foreach ($array as $key => $value)
if ($value === null || $value === '') unset($array[$key]);
else if (is_array($value))
if (empty($value)) unset($array[$key]);
else $array[$key] = clean_array($value);
if (!$isRepeat)
$array = clean_array($array,true);
return $array;
【讨论】:
$isRepeat 标志的意义何在?还添加一个 trim($value) 来比较 trim($value) === '' 可能很有用。【参考方案3】:递归函数,它将从输入数组中删除所有空值和空数组:
//clean all empty values from array
function cleanArray($array)
if (is_array($array))
foreach ($array as $key => $sub_array)
$result = cleanArray($sub_array);
if ($result === false)
unset($array[$key]);
else
$array[$key] = $result;
if (empty($array))
return false;
return $array;
我已经在这个例子上测试过了,不管数组有多深,它都可以工作:
$array = array(
'name' => array(
'name1' => array(0 => 1),
'name2' => array(0 => 3, 1 => array(5 => 0, 1 => 5)),
'name3' => array(0 => '')
)
);
希望这会有所帮助:)
【讨论】:
以上是关于PHP - 从数组中删除空值[重复]的主要内容,如果未能解决你的问题,请参考以下文章