2016-03-21 2 views
0

Я пытаюсь использовать следующий код, чтобы проверить, находится ли текущий URL-адрес в массиве.PHP для проверки Если текущий URL-адрес находится в массиве

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

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

Я думаю, что путь я создал массив неверно, так как следующий код (проверка на один URL) отлично работает ..

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

} 

Может кто-нибудь помочь мне?

+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"; 
} 

Надеется, что это помогает.