2014-09-10 7 views
1

У меня есть этот код:Как проверить, существует ли строка внутри массива, содержит часть строки в php?

$arr = array("Hello_backup","World!","Beautiful_backup","Day!"); 
if(in_array("backup", $arr)){ 
    echo "Da"; 
} else { echo "Nu"; 
} 

Но не работает, потому что, in_array инструкция проверить массив для всей строки «подпорки», который не делает exist.I нужно проверить на части строки, например , чтобы вернуться так, потому что резервная копией является частью «Hello_backup» и «Beautiful_backup» струн

EDIT: Я беру совет и я использовал stripos так:

$arr = array("Hello_backup-2014","World!","Beautiful_backup-2014","Day!"); 
$word='backup'; 
if(stripos($arr,$word) !== false){ 
echo "Da"; 
} else { echo "Nu";} 

но теперь я получаю сообщение об ошибке: «stripos() ожидает, что параметр 1 будет строкой, массив указан в if (stripos ($ arr, $ word)! == false) {"

+1

Ваша ошибка исходит из того, что вы пытаетесь использовать массив, как если бы это была строка. Вам нужно использовать 'foreach' в вашем массиве, чтобы получить каждую строку, содержащую этот массив. Посмотрите на пример @Ghost. – GeoffreyB

+3

@ Не обязательно, если вы хотите рассматривать все значения массива как единое целое, вы можете использовать implode для объединения элементов массива в виде строки. См. Мой ответ – iswinky

ответ

1

Использование implode в основном сцепить значения массива в виде строки, а затем использовать strpos для проверки строки в строке.

Первый аргумент, который вы передаете в implode, используется для разделения каждого значения в массиве.

$array = array("Hello_backup","World!","Beautiful_backup","Day!"); 
$r = implode(" ", $array); 

if (strpos($r, "backup") !== false) { 
    echo "found"; 
} 
+0

именно то, что я искал, она отлично работает спасибо :) – Memphistoles

1

В этом случае вам необходимо использовать stripos() , Пример:

$arr = array("Hello_backup","World!","Beautiful_backup","Day!"); 
$needle = 'backup'; 

function check($haystack, $needle) { 
    foreach($haystack as $word) { 
     if(stripos($word, $needle) !== false) { 
      return 'Da!'; // if found 
     } 
    } 
    return 'Nu'; // if not found 
} 

var_dump(check($arr, $needle)); 

Без функции:

$arr = array("Hello_backup","World!","Beautiful_backup","Day!"); 

$found = false; 
foreach($arr as $word) { 
    if(stripos($word, 'backup') !== false) { 
     $found = true; 
     break; 
    } 
} 

if($found) { 
    echo 'Da!'; 
} else { 
    echo 'Nu'; 
} 
+0

пример без функции, пожалуйста?Я новичок, и я не хочу использовать функции еще – Memphistoles

+0

У меня есть ошибка stripos() ожидает, что параметр 1 будет строкой, массив – Memphistoles

+0

@Memphistoles, если вы не хотите функции, проверьте мою ревизию – Ghost

1

Используйте этот метод. Он немного прост в использовании.

$matches = preg_grep('/backup/', $arr); 
$keys = array_keys($matches);  
print_r($matches); 

Посмотрите это working example

По вашему вопросу

$matches = preg_grep('/backup/', $arr); 
$keys = array_keys($matches);   
$matches = trim($matches);  
if($matches != '') 
{echo "Da"; 
}else { echo "Nu";} 
1
<?php 
    $arr = array("Hello_backup","World!","Beautiful_backup","Day!"); 
    foreach($arr as $arr1) { 
     if (strpos ($arr1,"backup")) { 
      echo "Da"; 
     } else { 
      echo "Nu"; 
     } 
    } 
?> 
1

Попробуйте с strpos()

$arr = array("Hello_backup","World!","Beautiful_backup","Day!"); 
foreach($arr as $v){ 
    echo (strpos($v,"backup")!== false ? "Da" : "Nu"); 
} 

выход: - DaNuDaNu

1

Вот одна линия для вас решение.

$arr = array("Hello_backup-2014","World!","Beautiful_backup-2014","Day!"); 

$returned_a = array_map(function($u){ if(stripos($u,'backup') !== false) return "Da"; else return "Nu";}, $arr); 

Вы можете использовать $ returned_a с массивом как ваш ответ .. Array ([0] => Da [1] => Nu [2] => Da [3] => Nu)