如果在while循环中重复foreach中的响应

时间:2017-02-10 15:25:04

标签: php if-statement foreach while-loop do-while

我在一个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。

2 个答案:

答案 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
}