2011-08-03 11 views
15

Busco una función que le da esta matriz,Buscar coincidencia de valor parcial en una matriz

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.. 

Quiero buscar la aguja

"Bread"

y obtener el siguiente resultado

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

Respuesta

35

Use array_filter. Puede proporcionar una devolución de llamada que decida qué elementos permanecen en la matriz y cuáles deben eliminarse. (A valor de retorno de false de la devolución de llamada indica que el elemento dado debe ser eliminado.) Algo como esto:

$search_text = 'Bread'; 

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

Para más información:

+1

Mejor uso 'strpos (...)! == FALSE. Esto ahorra una llamada a la función y esto es más rápido. – Shi

+1

Ha colocado argumentos en un orden no válido: array_filter (array $ input [, callback $ callback]) – manRo

+0

Reparado, gracias por su ayuda. –

0

hay una razón para multi array. es id único y se puede usar como índice.

$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 = 'bread';

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

también check this answer

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

Si no hay coincidencia, se devuelve una matriz vacía que es FALSE, por lo que puede hacer una if (preg_grep (..) – zzapper

Cuestiones relacionadas