PHP - 如果找到数组中的某个单词,则缩短字符串中的句子

Posted

技术标签:

【中文标题】PHP - 如果找到数组中的某个单词,则缩短字符串中的句子【英文标题】:PHP - Shorten Sentence in a String If a Certain Word in an Array is Found 【发布时间】:2014-01-05 01:32:20 【问题描述】:

我正在编写一个获取 METAR 报告并将其清除的 php 脚本。如果使用某些单词,我需要通过删除后面的所有内容来缩短 METAR。

例如,我需要删除 BECMG 之后的所有内容,包括以下字符串中 TEMPO 前面的空格,因为它不需要:

$metars = "2013/12/24 07:30 NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006 BECMG 20KM TEMPO 6000 RA BKN012 SPECI COR NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006 BECMG 20KM TEMPO 6000 RA BKN012";

$comments = array ("BECMG", "RMK", "TEMPO");

$metar = ???

我需要 $metar 是:

$metar = "2013/12/24 07:30 NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006";

这就是问题所在。我不能使用长度数字,因为长度可以改变。如何在单词数组中找到某个单词后删除所有内容,包括单词前面的空格以缩短字符串?

另外,$metars 包括 BECMG 和 TEMPO。如果在找到另一个单词后将其缩短,如何避免 $metar 包含 BECMG?换句话说,我想避免这种情况发生:

$metar = "2013/12/24 07:30 NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006 BECMG 20KM";

我希望它是:

$metar = "2013/12/24 07:30 NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006";

【问题讨论】:

一个 preg_replace() 会在这里帮助你。不要问我RegEx,因为我对此一无所知!哈哈php.net/preg_replace strposforeach 也足够好 【参考方案1】:

您可以使用foreach 循环和字符串函数,如strpossubstr 来实现您的需要:

$metar = "2013/12/24 07:30 NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006 BECMG 20KM TEMPO 6000 RA BKN012 SPECI COR NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006 BECMG 20KM TEMPO 6000 RA BKN012";
$comments = array ("BECMG", "RMK", "TEMPO");
foreach($comments as $comment)
$pos = strpos($metar, " ".$comment);
if($pos !== false)
$metar = substr($metar, 0, $pos);

// Now $metar is "2013/12/24 07:30 NZOH 240730Z 31011G21KT 280V340 5000 -SHRA FEW020 BKN048 19/14 Q1006"

【讨论】:

警告:strstr() 的参数计数错误我不确定是什么导致代码中出现这种情况。 我已经修改了我的答案。当strstr 没有可选的“before_needle”参数时,您可能使用的是 5.3.0 之前的 PHP 版本。不过,substr 足以满足您的目的。 感谢您的帮助!

以上是关于PHP - 如果找到数组中的某个单词,则缩短字符串中的句子的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何输出数组中某个特定值

面试题总结1统计字符串中某个单词出现的次数

将数组的值与字符串 PHP 匹配

php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

php 中 判断数组中是不是有值

leetcode 每日一题 79. 单词搜索