首页 > 解决方案 > 使用 array_filter 删除空子数组值

问题描述

我将带有子数组值数据的数组添加到mysql数据库中,如下所示:

{"2":[
{"title":"english title","link":"english url"},
{"title":"","link":""}],
"1":[
{"title":"french title","link":"french url"},
{"title":"","link":""}]}

我尝试使用以下方法删除子empty数组值:array_filterarray_map

var_dump(array_filter(array_map('array_filter', $links)));

现在,当我检查使用时,var_dump我看到了这个结果并且array_filter不能array_map删除空值:

array(2) {
  [2]=>
  array(3) {
    [0]=>
    array(2) {
      ["title"]=>
      string(13) "english title"
      ["link"]=>
      string(11) "english url"
    }
    [1]=>
    array(2) {
      ["title"]=>
      string(0) ""
      ["link"]=>
      string(0) ""
    }
  }
  [1]=>
  array(3) {
    [0]=>
    array(2) {
      ["title"]=>
      string(12) "french title"
      ["link"]=>
      string(10) "french url"
    }
    [1]=>
    array(2) {
      ["title"]=>
      string(0) ""
      ["link"]=>
      string(0) ""
    }
  }
}

在行动中,我怎样才能删除empty子数组值?!

更新:我需要这个结果:

Array
(
    [2] => Array
        (
            [0] => Array
                (
                    [title] => english title
                    [link] => english url
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [title] => french title
                    [link] => french url
                )
        )

)

标签: phparraysarray-filter

解决方案


您的问题是您尝试过滤的项目不是空的(empty($links[2][1]) === false),它们是一个二元素数组,因此array_filter不会删除它们。相反,您需要检查两个元素是否为空白。例如,使用array_walk

array_walk($links, function (&$array) { 
    $array = array_filter($array, function ($obj) {
        return $obj['title'] != '' || $obj['link'] != '';
    });
});

print_r($links);

输出:

Array
(
    [2] => Array
        (
            [0] => Array
                (
                    [title] => english title
                    [link] => english url
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [title] => french title
                    [link] => french url
                )
        )
)

3v4l.org 上的演示


推荐阅读