我在一个while循环中有一个if。我在另一个文本字符串中搜索字符串。
$base = 'someurl';
$url = $base;
while(1){
$json = json_decode(file_get_contents($url));
$more = $json->next_page;
$next = $json->next_page_number;
if($more){
$url = $base.'&page='.$next;
}else{
break;
}
foreach($json as $data){
$c = $data->text; // search in
$s = 'string';
$t = 'prefix1'.$s; // search for
$m = 'prefix2'.$s; // search for
if( (strpos($c, $t) || strpos($c, $m)) !== false ){
echo '<p>hello, i found one or more ($t and/or $m) of the search criteria in the text string $c .</p>';
break;
}
}
}
问题是我从if语句中得到两次回声:(
我想要达到的目的只是让回声发生在ONCE,如果$ c中存在$ t和/或$ m。
答案 0 :(得分:0)
好吧,我猜你收到的回声是两次,因为你找到了2条符合你病情的记录,这可能吗?
如果是这样,并且您只想检查您的条件在阵列上至少匹配一次,那么您可能会在找到第一场比赛后打破foreach,例如:
if( ( strpos( $c, $t ) || strpos( $c, $m ) ) !== false ){
echo '<p>hello, I was told I was true</p>';
break;
}
答案 1 :(得分:0)
好的,所以为我的特定问题找到了一个可行的解决方案(虽然我仍然不清楚为什么if语句响应被回复了两次?)。
使用preg_match而不是strpos给了我一个可行的解决方案:)
if(preg_match('('.$t.'|'.$m.')', $c) === 1){
// tis' the truth echoed thru eternity
}