PHP preg_grep 错误?
Posted
技术标签:
【中文标题】PHP preg_grep 错误?【英文标题】:PHP preg_grep error? 【发布时间】:2017-09-06 01:36:32 【问题描述】:php preg_grep 不工作?我是PHP初学者,也是英文交流。 该程序的执行结果以“ArrayArray”表示...
<?php
$news = fopen("news.txt", "r");
$keywords = fopen("keywords.txt", "r");
$open_news = [];
while (!feof($news))
$open_news[] = fgets($news);
$arr_keywords = [];
while (!feof($keywords))
$arr_keywords[] = fgets($keywords);
$count = count($arr_keywords);
for ($i = 0 ; $i <= $count; $i++)
if ($x = preg_grep("/^" . $arr_keywords[$i] . "/", $open_news))
echo $x;
fclose($news);
fclose($keywords);
?>
【问题讨论】:
你不能回显一个数组,使用var_dump($x)
转储$x。从这里可以看到:php.net/manual/en/function.preg-grep.php,preg_grep 的返回值是一个数组。
【参考方案1】:
preg_grep returns 匹配行数组,因此您应该将代码重写为
for ($i = 0 ; $i <= $count; $i++)
if ($x = preg_grep("/^" . $arr_keywords[$i] . "/", $open_news))
echo implode(', ', $x), PHP_EOL;
可以简化整个脚本:
<?php
$open_news = file("news.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$arr_keywords = file("keywords.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($arr_keywords as $keyword)
if ($x = preg_grep("/^" . preg_quote($keyword, '/') . "/", $open_news))
echo implode(', ', $x) . PHP_EOL;
【讨论】:
【参考方案2】:你也可以选择T-Regx:
Pattern::inject('^@keyword', ['keyword' => $arr_keywords[$i]])
->forArray($open_news)
->filter();
【讨论】:
以上是关于PHP preg_grep 错误?的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中使用 preg_grep() 查找字符串之前或之后的字符