如何在php中取消设置空数组?
Posted
技术标签:
【中文标题】如何在php中取消设置空数组?【英文标题】:how to unset empty arrays in php? 【发布时间】:2012-04-06 16:01:18 【问题描述】:我有一个数组$mainArray
,我想删除/取消设置没有值的键的数组。
这是我的数组:
Array
(
[0] => Array
(
[msg_id] => 203
[comment] => Array
(
[0] => Array
(
[com_id] =>
)
)
)
[1] => Array
(
[msg_id] => 202
[comment] => Array
(
[0] => Array
(
[com_id] => 196
)
[1] => Array
(
[com_id] => 197
)
[2] => Array
(
[com_id] =>
)
)
)
[2] => Array
(
[msg_id] => 201
[comment] => Array
(
[0] => Array
(
[com_id] => 198
)
[1] => Array
(
[com_id] =>
)
)
)
)
在这种情况下,我想查看 comment
数组数组,看看它们中是否有任何空值。如果所有子数组都为空,最好的情况是完全删除 comment
数组。
离开 comment
嘿,只是空
这个数组应该变成:
Array
(
[0] => Array
(
[msg_id] => 203
)
[1] => Array
(
[msg_id] => 202
[comment] => Array
(
[0] => Array
(
[com_id] => 196
)
[1] => Array
(
[com_id] => 197
)
)
)
[2] => Array
(
[msg_id] => 201
)
)
关于如何进行的任何想法?
谢谢。
【问题讨论】:
【参考方案1】:使用 php 的 unset()
取消设置任何数组键/值。
更多信息在这个链接http://in3.php.net/unset
在你的情况下,代码可以,(我没有测试过。但如果你有任何问题,请告诉我,我可以解决它)
function unsetCommentFromArray($mainArray)
foreach($mainArray as $key => $value)
foreach($value['comment'] as $k => $v)
if(empty($v['com_id']))
unset($mainArray[$key]['comment'][$k]);
return $mainArray;
【讨论】:
【参考方案2】:$array = array_map(function ($i)
$i['comment'] = array_filter($i['comment'], function ($c) return $c['com_id']; );
return array_filter($i);
, $array);
需要 PHP 5.3 或更高版本。
【讨论】:
【参考方案3】:array_filter()
是您所追求的。特别是递归版本。以下内容来自a comment on the PHP Doc:.
function array_filter_recursive($array, $callback = null)
foreach ($array as $key => & $value)
if (is_array($value))
$value = array_filter_recursive($value, $callback);
else
if ( ! is_null($callback))
if ( ! $callback($value))
unset($array[$key]);
else
if ( ! (bool) $value)
unset($array[$key]);
unset($value);
return $array;
【讨论】:
以上是关于如何在php中取消设置空数组?的主要内容,如果未能解决你的问题,请参考以下文章