2011-01-24 20 views
2

私は単語の文字列を検索したいのですが、この単語が見つからない場合は、別の単語を検索して、文字列を検索するためのコードを表示しますが、検索は続行しません。検索キーワードが見つからない場合は、他の単語を検索してください。

乾杯 アシュリー

P.sのPHPコード私は

は、あなたの助けの人たちのために非常に多くの

をいただき、ありがとうございます必要なものである私は、チップの将来のおかげで私のWIPコードを掲載します。

+1

を意味するかそれはあなたのためにこれをコーディングするために誰かの素敵でした。通常は、少なくとも自分でコードを作成して、それを理解するのに役立たないコードを提供することをお勧めします。 –

答えて

0

検索する配列にすべての値を配置すると、その配列内をループして文字列内の配列を見つけることができます。

$string = "I love to eat tacos."; 
$searchfor = array("brown", "lazy", "tacos"); 

foreach($searchfor as $v) { 
    if(strpos($string, $v)) { 
    //Found a word 
    echo 'Found '.$v; 
    break; 
    } 
} 

これは、希望出力:これは、大文字と小文字が区別されstrpos使用さ

Found tacos 

。大文字と小文字を区別しない場合は、striposを使用できます。

PHP: strpos

+0

'strstr'の代わりに' strpos'を使用してください。リンク先のマニュアルページの注記を参照してください:) – mfonda

+0

@mfondaありがとう、私は本当に 'strpos'を意味していたと思います。私は正しいアイデアを反映するために私の答えを更新しました。 –

1

これは非常に簡単です:

$string = "This is the string I want to search in for a third word"; 

$words = array('first', 'second', 'third'); 
$found = ''; 
foreach ($words as $word) { 
    if (stripos($string, $words) !== false) { 
     $found = $word; 
     break; 
    } 
} 
echo "This first match found was '$found'"; 

注:彼らは唯一の整数位置を返しますので、(大文字と小文字を区別しない検索のためかstriposstrposを使用してください。 strstrのようなものは、この目的のために必要でない文字列の一部を返します。

編集:

それとも、あなたは、単一の正規表現を行うことができますループなし:

$words = array('first', 'second', 'third'); 
$regex = '/(' . implode('|', $words) . ')/i'; 
//$regex becomes '/(first|second|third)/i' 
if (preg_match($regex, $string, $match)) { 
    echo "The first match found was {$match[0]}"; 
} 
1

ような何か:

$haystack = 'PHP is popular and powerful'; 
$needles = array('Java','Perl','PHP'); 
$found = ''; 
foreach($needles as $needle) { 
     if(strpos($haystack,$needle) !== false) { 
       $found = $needle; 
       break; 
     } 
} 

if($found !== '') { 
     echo "Needle $found found in $haystack\n"; 
} else { 
     echo "No needles found\n"; 
} 

上記のコードは、サブ文字列の一致を検討します有効な一致として例えば、針が'HP'の場合、それはPHPの部分文字列であることがわかります。完全な単語が一致してあなたのようにpreg_matchを利用することができるようにするに

foreach($needles as &$needle) { 
     $needle = preg_quote($needle); 
} 

$pattern = '!\b('.implode('|',$needles).')\b!'; 

if(preg_match($pattern,$haystack,$m)) { 
     echo "Needle $m[1] found\n"; 
} else { 
     echo "No needles found\n"; 
} 

See it

0

あなたは

<?php 


function first_found(array $patterns, $string) { 
    foreach ($patterns as $pattern) { 
     if (preg_match($pattern, $string, $matches)) { 
      return $matches; 
     } 
    } 
} 

$founded = first_found(
    array(
     '/foo/', 
     '/bar/', 
     '/baz/', 
     '/qux/' 
    ), 
    ' yep, it qux.' 
); 
関連する問題