array_filter跳过null或0值

时间:2016-02-20 18:42:33

标签: php

我希望像这样分割一个网址:$url = "log/getLog/0/categorias/5/";使用此功能:

$urlParts = array_filter(explode('/', $url));

但这回归:

  

array(4){[0] => string(11)“log”[1] => string(8)“getLog”[3] => string(10)“categorias”[4] => string(1)“5”}

如何查看已跳过的0值。我可以做些什么来避免这个错误?

1 个答案:

答案 0 :(得分:2)

array_filter将删除包含nullempty0值的所有元素。 要在您的情况下处理值0,可以使用回调函数,您可以在其中明确指定允许哪些值以及忽略哪些值。

我创建了一个自定义回调函数,该函数将接受0但过滤nullemptyfalse值。

<?php
$url = "log/getLog/0/categorias/5/";

$urlParts = array_filter(explode('/', $url), function($v){
    return $v !== false && !is_null($v) && ($v != '' || $v == '0');
});

print_r($urlParts);

$url = array(
         0 => 'foo',
         1 => false,
         2 => -1,
         3 => null,
         4 => '',
         5 => 0
      );

$urlParts = array_filter($url, function($v){
    return $v !== false && !is_null($v) && ($v != '' || $v == '0');
});

print_r($urlParts);
?>
  

输出

Array
(
    [0] => log
    [1] => getLog
    [2] => 0
    [3] => categorias
    [4] => 5
)
Array
(
    [0] => foo
    [2] => -1
    [5] => 0
)

工作Demo