我有一个数组的$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
)
)
关于如何进行的任何想法?
感谢。
答案 0 :(得分:2)
使用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;
}
答案 1 :(得分:2)
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;
}
答案 2 :(得分:1)
$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或更高版本。