【问题标题】:Array filter only remove the values without whitespaces数组过滤器只删除没有空格的值
【发布时间】:2017-01-30 09:14:39
【问题描述】:

数组示例

如上图所示,array_filter 只删除像 ' ' 没有空格的值。
对于底部,2 值也是空的,但因为它有空格,所以它不会过滤它。
有什么解决办法吗?我尝试 preg_replace() 和 trim() 也无法删除带有空格的空值...

【问题讨论】:

  • 请将您的数组包含为实际文本 - 不是图像!
  • 显示您的array_filter的代码,以及您正在使用的回调;并学习如何复制/粘贴代码/文本,而不是显示它的图像
  • 使用 str_replace() 方法将空格替换为 null。循环遍历数组并检查值是否为空格..用 ("") null 替换,然后使用过滤器
  • function GetAPI($data, $value) { foreach ($data as $key => $product) { if (in_array("$value",$product)) { $filter= array_filter( $结果); $last = array_slice($filter, -1, true); $headers = array_slice($filter, 0, 2, true); $final =array_merge($headers, $last); } } }
  • array_filter($result);.... 那么$result 来自哪里?你的意思是$product 而不是$result

标签: php


【解决方案1】:

对于array_filter,如果没有提供callback,所有等于FALSE 的数组条目将被删除。您可以使用array_filtercallback 参数来执行此操作。

<?php

$array = [
    'varA' => '',
    'varB' => ' ',
    'varC' => '1',
    'varD' => '   ',
];

$newArr = array_filter($array, function($v, $k){
    return !empty(trim($v));
}, ARRAY_FILTER_USE_BOTH);

var_dump($newArr);

见:http://php.net/manual/en/function.array-filter.php

编辑:

对于多维数组,可以遍历数组,对每个元素做array_filter。对每个元素执行str_replace 不是一个好习惯:这会减慢您的代码速度,并使您的代码更加复杂。

$array = array(
    array(
        'varA' => '',
        'varB' => ' ',
        'varC' => '1',
        'varD' => '   ',
    ),
    array(
        'varA' => '!!!',
        'varB' => '   ',
        'varC' => 'xxx',
        'varD' => '',
    )
);

$newArr = $array;
foreach ($newArr as &$each){
    $each = array_filter($each, function($v, $k){
        return !empty(trim($v));
    }, ARRAY_FILTER_USE_BOTH);
}

var_dump($newArr);

【讨论】:

  • 结果是一样的,没有变化:(
  • @hanjeahwan 您确定运行与提供的代码相同的代码吗?我打印的结果只剩下 varC。
  • 我在沙箱中向你展示我的代码,如果一个数组中有 2 个数组,它不会删除所有空格,你可以看看吗?
  • @hanjeahwan 你需要点击分享代码并将链接粘贴到这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多