2011-08-03 13 views
15

szukam funkcji gdzie dany tę tablicę,Szukaj częściowego meczu wartości w tablicy

array(
[0] => 
    array(
    ['text'] =>'I like Apples' 
    ['id'] =>'102923' 
) 
[1] => 
    array(
    ['text'] =>'I like Apples and Bread' 
    ['id'] =>'283923' 
) 
[2] => 
    array(
    ['text'] =>'I like Apples, Bread, and Cheese' 
    ['id'] =>'3384823' 
) 
[3] => 
    array(
    ['text'] =>'I like Green Eggs and Ham' 
    ['id'] =>'4473873' 
) 
etc.. 

chcę szukać igły

"Bread"

i uzyskać następujący wynik

[1] => 
    array(
    ['text'] =>'I like Apples and Bread' 
    ['id'] =>'283923' 
) 
[2] => 
    array(
    ['text'] =>'I like Apples, Bread, and Cheese' 
    ['id'] =>'3384823' 

Odpowiedz

35

Użyj array_filter. Możesz podać wywołanie zwrotne, które decyduje, które elementy pozostają w tablicy i które powinny zostać usunięte. (Wartość powrotu false z zwrotnego oznacza, że ​​dany element powinien zostać usunięty.) Tak:

$search_text = 'Bread'; 

array_filter($array, function($el) use ($search_text) { 
     return (strpos($el['text'], $search_text) !== false); 
    }); 

Więcej informacji:

+1

Lepsze wykorzystanie 'strpos (...)! == FALSE. Spowoduje to zapisanie wywołania funkcji, co jest szybsze. – Shi

+1

Umieszczono argumenty w nieprawidłowej kolejności: array_filter (array $ input [, callback $ callback]) – manRo

+0

Naprawiono, dziękuję za pomoc. –

0

jest powód dla wielu tablic. jest identyfikatorem unikalnym i może być użyty jako indeks.

$data=array(

    array(
    'text' =>'I like Apples', 
    'id' =>'102923' 
) 
, 
    array(
    'text' =>'I like Apples and Bread', 
    'id' =>'283923' 
) 
, 
    array(
    'text' =>'I like Apples, Bread, and Cheese', 
    'id' =>'3384823' 
) 
, 
    array(
    'text' =>'I like Green Eggs and Ham', 
    'id' =>'4473873' 
) 

); 

$ findme = "chleb";

foreach ($data as $k=>$v){ 

if(stripos($v['text'], $findme) !== false){ 
echo "id={$v[id]} text={$v[text]}<br />"; // do something $newdata=array($v[id]=>$v[text]) 
} 

} 
5

również check this answer

$filenames=array("120_120_435645.jpg","150_150_312312.jpg","250_250_1232327.jpg"); 
$matches = preg_grep("/312312/", $filenames); 
+0

Jeśli żaden mecz nie zwróci pustej tablicy, która jest FALSE, więc możesz zrobić a, jeśli (preg_grep (..)) – zzapper