2016-03-21 16 views
0

次のコードを使用して、現在のURLが配列内にあるかどうかを確認しようとしています。PHPが現在のURLが配列内にある場合

$reactfulPages = array(
    'url-one', 
    'url-two', 
    'url-three', 
); 

if (strpos($url, $reactfulPages) == true) { 
    echo "URL is inside list"; 
} 

私は

if (strpos($url,'url-one') == true) { // Check if URL contains "landing-page" 

} 

は誰もが私を助けることができます..私は配列を設定している方法は、正常に動作します(1つのURLをチェック)、次のコードのように間違っていると思いますか?

+0

...何ですか?コードは動作していますが、それは何かを想定していませんか? – Epodax

+0

@James reactfulPagesは配列なので、 "strpos($ url、$ reactfulPages)"は使用できません。str pos配列ではなく文字列内の単語または文字を検索するために使用します。 urlが配列内に存在することを発見するには、in_array($ value、$ array)メソッドを使用できます。 –

答えて

7

配列は問題ありません。チェックする関数は正しい方法ではありません。 strpos()関数は、文字列の位置をチェックするための関数です。

アレイに何かがあるかどうかを確認するには、in_array()機能を使用できます。

<?php 
$reactfulPages = array(
    'url-one', 
    'url-two', 
    'url-three', 
); 

if(in_array($url, $reactfulPages)) { 
    echo "The URL is in the array!"; 
    // Continue 
}else{ 
    echo "The URL doesn't exists in the array."; 
} 
?> 

私はこれがうまくいくと思います。

1

関数strpos()は、文字列内の部分文字列を探し、見つかった場合は部分文字列の位置を返します。それがあなたの最後の例が働く理由です。

あなたは何かが配列内に存在するかどうかを確認したい場合は、そのように、in_array()機能を使用する必要があります。

$reactfulPages = array(
    'url-one', 
    'url-two', 
    'url-three', 
); 

if (in_array($url, $reactfulPages) == true) { 
    echo "URL is inside list"; 
} 

をしかし、あなたはURLのを比較していることから、私はあなたがチェックしたいと仮定していますURLに配列からの文字列のいずれかが含まれているかどうか、必ずしも一致させる必要はありません。あなたは、あなたの例には、この機能を適用することができます

function contains_any($string, $substrings) { 
    foreach ($substrings as $match) { 
     if (strpos($string, $match) >= 0) { 
      // A match has been found, return true 
      return true; 
     } 
    } 

    // No match has been found, return false 
    return false; 
} 

::このことができます

$reactfulPages = array(
    'url-one', 
    'url-two', 
    'url-three', 
); 

if (contains_any($url, $reactfulPages)) { 
    echo "URL is inside list"; 
} 

希望 この場合、あなたはこのようになり、独自の機能を、記述する必要があります。

関連する問題