如何在跳过空数组项时内爆数组?

Tom*_*ger 88 php implode

Perl join()忽略(跳过)空数组值; PHP implode()似乎没有.

假设我有一个数组:

$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
Run Code Online (Sandbox Code Playgroud)

收益率:

one---four--six
Run Code Online (Sandbox Code Playgroud)

而不是(恕我直言):

one-four-six
Run Code Online (Sandbox Code Playgroud)

有我正在寻找的行为的任何其他内置插件?或者它是一个定制的工作?

Fel*_*ing 194

你可以使用array_filter():

如果没有提供回调,则将删除所有输入等于FALSE(参见转换为布尔值)的条目.

implode('-', array_filter($array));
Run Code Online (Sandbox Code Playgroud)

显然,如果你在数组中有0(或任何其他值,false并且你想保留它),这将不起作用.但是,您可以提供自己的回调函数.

  • 这是否意味着`false`和`0`也被抛出? (5认同)
  • +1,但必须提到的是,`array_filter()`默认过滤每个`false`,`null`,空字符串('')和`0`. (3认同)

Ben*_*Ben 8

我想你不能认为它是内置的(因为函数是用用户定义的函数运行的),但是你总是可以使用array_filter.
就像是:

function rempty ($var)
{
    return !($var == "" || $var == null);
}
$string = implode('-',array_filter($array, 'rempty'));
Run Code Online (Sandbox Code Playgroud)


小智 8

要删除null, false, emptystring 但保留0等,请使用 func。' strlen'

$arr = [null, false, "", 0, "0", "1", "2", "false"];
print_r(array_filter($arr, 'strlen'));
Run Code Online (Sandbox Code Playgroud)

将输出:

//Array ( [3] => 0 [4] => 0 [5] => 1 [6] => 2 [7] => false )
Run Code Online (Sandbox Code Playgroud)