【问题标题】:remove empty sub arrays value using array_filter使用 array_filter 删除空子数组值
【发布时间】:2020-10-05 11:27:16
【问题描述】:

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

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

我尝试使用array_filterarray_map 删除empty 子数组值,如下所示:

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

现在,当我使用 var_dump 检查时,我看到了这个结果,array_filterarray_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
                )
        )

)

【问题讨论】:

  • 你的预期输出是什么?
  • 如果你认为由 JSON 解码 {"title":"","link":""} 产生的对象或数组会被 PHP 视为“空”……那你就错了。
  • @Nick:我需要像这样从数组中删除空值:Array([2] => Array( [0] => Array([title] => english title [link] => english url)) [1] => Array([0] => Array( [title] => french title [link] => french url )))

标签: php arrays array-filter


【解决方案1】:

您的问题是您要过滤的项目不是空的(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
                )
        )
)

Demo on 3v4l.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2019-11-19
    • 2021-12-29
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多