2011-05-03 11 views
6

Necesito averiguar si existe una cadena dentro de un valor de matriz, pero no es necesariamente el valor real de la matriz.Ejecutando "strpos" en cada elemento de la matriz

$array = array(
     0 => 'blue', 
     1 => 'red', 
     2 => 'green', 
     3 => 'red' 
); 

$key = xxxxxx('gr', $array); // $key = 2; 

¿Hay una construida en la manera de hacer esto con PHP

+0

¿Qué quiere decir con $ key = 2? ¿Quieres encontrar un cierto valor o una determinada clave? – markus

Respuesta

12

Puede utilizar preg_grep para este fin

<?php 
$array = array(
     0 => 'blue', 
     1 => 'red', 
     2 => 'green', 
     3 => 'red' 
); 

//$key = xxxxxx('gr', $array); // $key = 2; 
$result=preg_grep("/^gr.*/", $array); 
print_r($result); 
?> 

DEMO

+0

Dulce, ese sitio de demostración también es genial :) – Webnet

+2

Me gustaría votar esto dos veces si pudiera, mucho tiempo desde que recordé que PHP tenía una función 'preg_grep()'! –

+0

Estoy intentando 'preg_grep ("/^ \/scripts \/GMC \/PNetT \ -5 \ .1 \ -SP1 \/PNetT. */", Exec ('ps -ef | grep GMC', $ salida));; 'pero no está encontrando el resultado cuando sé que existe el resultado ... ¿estoy escapando esto correctamente? – Webnet

0

uso

array_walk con strpos

array_walk

+0

Y los argumentos para strpos van a dónde? –

2

Función: array_filter es lo que desea. Solo conservará los elementos en la matriz resultante cuando la función especificada sea verdadera para ellos.

// return true if "gr" found in $elem 
// for this value 
function isGr($key, $elem) 
{ 
    if (strpos($elem, "gr") === FALSE) 
    { 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 
} 

$grElems = array_filter($array, "isGr"); 
print_r($grElems); 

resultados en:

array(
    2=>'green' 
) 
0

No hay ninguna función integrada pero desde preg_* funciones matrices de soporte como argumentos esto debería funcionar:

$keys = preg_filter('~gr~', '$0', $array); 
0

bucle a través de la matriz y comprobar cada artículo, luego devuelva el índice si lo hace.

function substr_in_array($array, $substr) { 
    foreach ($array as $index => $item) { 
     if (strrpos($item, $substr)!===FALSE && $item != $substr) { 
      return $index; 
     } 
    } 
} 

Esto debería hacer lo que quiera.

2

Su xxxxxx sería array_map. Pero, por desgracia, no puede usar strpos como devolución de llamada simple aquí. Para pasar el parámetro de búsqueda real, es necesario definir una costumbre o automático- anónima

Y para conseguir lo que quiere, se necesita más de envolver sigue:

$key = key(
      array_filter(
      array_map(
       function($s){return strpos($s, "gr");}, 
       $array 
      ), 
      "is_int") 
     ); 

Esto le da el índice buscado 2 sin embargo.

1

¿qué ocurre con foreach?

function xxxxxx($str, $array) { 
    foreach ($array as $key => $value) { 
    if (strpos($value, $str) !== false) { 
     return $key; 
    } 
    } 
    return false; 
} 
+0

Este método funcionó perfecto para lo que yo buscaba. Lo alteré ligeramente para poder alimentar agujas simples y múltiples. find función ($ haystack, $ needles) { $ needle = array_map ('trim', explotar (",", $ needles)); foreach ($ needle as $ key => $ value) { if (strpos ($ value, $ haystack)! == falso) { return true; } } return false; } Luego llamo algo como find ($ page, "home, about"); –

0

Comprueba el uso de foreach en cada elemento de la matriz mediante strpos.

<?php 
$array = array(
     0 => 'blue', 
     1 => 'red', 
     2 => 'green', 
     3 => 'red' 
); 
$search='aaa'; 
function arraysearch($array,$search){ 
foreach ($array as $element){ 
if(strpos($element,$search)!==FALSE){ 
return TRUE; 
} 
} 
return FALSE; 
} 
echo arraysearch($array,$search); 
?> 
0

Con PHP 5.3 se puede hacer en un comando usando array_filter y una función anónima:

$keys = array_filter($array, function($var){ return strpos($var, 'gr') !== false; }); 
0

Mediante el uso de PHP> = 5.3.0, se puede utilizar como anonymous functionscallback para filtrar esa matriz con array_filter.

$array = array(
    0 => 'blue', 
    1 => 'red', 
    2 => 'green', 
    3 => 'red' 
); 

$search = 'gr'; 

$key = array_filter($array, function($element) use($search) { 
    return strpos($element,$search) !== FALSE; 
}); 

Esta es una versión mejorada de la respuesta Shay Ben Moshe.

Cuestiones relacionadas