2012-02-25 18 views
8

Me gusta realizar una búsqueda en una matriz y devolver todos los valores cuando se encuentra una coincidencia. La clave [name] en la matriz es en lo que estoy haciendo una búsqueda.Buscar matriz y devolver todas las claves y valores cuando se encuentra coincidencia

Array (
[0] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[1] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 

Si lo hiciera una búsqueda de John Doe volvería.

Array 
(
    [id] => 20120101 
    [link] => www.johndoe.com 
    [name] => John Doe 
) 

¿Sería más fácil de cambiar el nombre de las matrices en base a lo que estoy buscando. En lugar de la matriz anterior, también puedo generar lo siguiente.

Array (
[Jane Doe] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[John Doe] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 
+0

Usted corre el riesgo de tener claves duplicadas si utiliza nombres por tus llaves – BenOfTheNorth

+0

Que ignoraré la segunda idea y buscaré solo la primera matriz. – Tim

Respuesta

6
$filteredArray = 
array_filter($array, function($element) use($searchFor){ 
    return isset($element['name']) && $element['name'] == $searchFor; 
}); 

requiere PHP 5.3.x

+0

Corto y rápido y fácil de implementar Exactamente lo que estaba buscando. ¡Gracias un montón! – Tim

1
function search_array($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if ($item['name'] == $name){ // or other string comparison 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 
+0

Ya hay una función incorporada 'array_search', http://docs.php.net/array_search ->' Error fatal: No se puede redeclarar array_search() ' – VolkerK

+1

mi mal, simplemente nómbrelo de otra forma ... – scibuff

1

me gustaría ofrecer un cambio opcional a la respuesta de scibuff (que era excelente). Si no busca una coincidencia exacta, sino una cadena dentro de la matriz ...

function array_search_x($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if (strpos($item['name'], $name) !== false) { // changed this line 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 

Call esto con ...

$pc_ct = array_search_x($your_array_name, 'your_string_here'); 
Cuestiones relacionadas