我正在返回以换行符分隔的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不起作用。有什么建议?谢谢!
答案 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);