只需要在preg_split之后返回非空数组值

时间:2014-06-11 17:18:26

标签: php arrays

我正在返回以换行符分隔的textarea中输入的内容,如下所示:

06/10/2014 
06/11/2014

但是,我想避免这样一个事实,即如果用户应该在文本框中以这种方式输入它(太多的断点会留下空白空间):

06/10/2014


06/11/2014

我想说明这一点,但仍然只返回两个日期值,而不是额外的换行符。如果返回第二个例子,数组看起来像这样:

PHP代码

$date_array = preg_split("/(\r\n|\r|\n)/", $row['blackout_date'], -1, PREG_SPLIT_NO_EMPTY);
            // check for any extra returns or white spaces
            print_r($date_array);

ARRAY

Array ( [0] => 06/11/2014
[1] => 
[2] => 06/12/2014 )

我想摆脱那个空数组,但是array_filter不起作用。有什么建议?谢谢!

3 个答案:

答案 0 :(得分:1)

只需像这样使用array_filter来摆脱空数组值:

// Set the test data.
$test_data = <<<EOT
06/10/2014


06/11/2014
EOT;

// Check for any extra returns or white spaces.
$date_array = preg_split("/(\r\n|\r|\n)/", $test_data, -1);

// Use 'array_filer' and 'array_values' to shake out the date array.
$date_array = array_values(array_filter($date_array));

// Check the cleaned date array by dumping the data.
echo '<pre>';
print_r($date_array);
echo '</pre>';

输出结果为:

Array
(
    [0] => 06/10/2014
    [1] => 06/11/2014
)

或者如何以另一种方式攻击空行:也许您应该使用preg_match_all来匹配您想要的实际日期,而不是与preg_split分开?

// Set the test data.
$test_data = <<<EOT
06/10/2014


06/11/2014
EOT;

// Match all of the dates that match your format.
preg_match_all('/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/is', $test_data, $matches);

// Set the date array based on the dates matched.
$date_array = array_values(array_filter($matches[0]));

// Check the cleaned date array by dumping the data.
echo '<pre>';
print_r($date_array);
echo '</pre>';

输出结果如下:

Array
(
    [0] => 06/10/2014
    [1] => 06/11/2014
)

答案 1 :(得分:1)

优先级在模式中的交替|中的工作方式可能会导致不被视为空的流浪\n\r。尝试:

$date_array = preg_split("/\s+/", $row['blackout_date'], -1, PREG_SPLIT_NO_EMPTY);

在这种情况下,PREG_SPLIT_NO_EMPTY可能不需要,但我保持安全。

答案 2 :(得分:0)

使用\r\n pattern

preg_split()可用于解决您的问题。

$date_array = preg_split('/[\r\n]+/', $row['blackout_date'], -1, PREG_SPLIT_NO_EMPTY);