2017-02-10 28 views
0

whileループでforeachにifがある。私は別の文字列で文字列を探しています。whileループでforeachで応答を繰り返す場合

$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文からエコーを得ることである$ tと/または$ mが存在する場合、唯一のエコーがONCE実現するためにあります$ cで。

+0

限り、私はそれを見ると、その行があるため、 '(1)中の無限にエコーします;' – Jerodev

+0

@Jerodev - いや、元のループにif/breakがあります。私の悪いことです。更新されたコードを参照してください;) – axelra82

答えて

0

OK、そう、私の特定の問題のための実用的なソリューションを見つけました。代わりにstrposのするpreg_matchを使用して

が私に作業溶液を得た:)

if(preg_match('('.$t.'|'.$m.')', $c) === 1){ 
    // tis' the truth echoed thru eternity 
} 
0

あなたの条件に一致する2つのレコードを見つけたのでその場合はまあ、私は

?可能ということです、あなたが二回エコーを受信して​​いると思います、そしてあなたは、あなたの条件に一致していることを確認したいですアレイ上で少なくとも1回は、あなたがあなたのモミを見つけた後でforeachを壊すことができますトンの試合は、のように:(私はif文の応答が二回こだましてしまった理由として、まだ明確ではないんだが?)

if((strpos($c, $t) || strpos($c, $m)) !== false){ 
    echo '<p>hello, I was told I was true</p>'; 
    break; 
} 
+0

申し訳ありませんが、私はすでにそれを試しました。更新されたバージョンを参照(同じ結果)。 – axelra82

+0

それで、あなたはwhileループのURLから2つの異なる "ページ"で一致を得ています(forではない)。一致するものが見つかると、 '$ url'と' $ c'を表示して、どこに一致するものが見えるのでしょうか? – peiiion

関連する問題