Pregunta sobre arrays, php, filtering, higher-order-functions – ¿Cómo eliminar todos los elementos de la matriz de PHP que contienen una cierta subcadena?

3

ok busqué algunas funciones y parece que no tuve la suerte de encontrar ninguna,

Quiero filtrar una matriz para eliminar una matriz específica que contiene alguna cadena

Heres un ejemplo:

<code>$array(1 => 'January', 2 => 'February', 3 => 'March',);
$to_remove = "Jan"; // or jan || jAn, .. no case sensitivity
$strip = somefunction($array, $to_remove);
print_r($strip);
</code>

debería volver

<code>[1] => February
[2] => March
</code>

una función que busca la subcadena para todos los valores de una matriz, si se encuentra la subcadena, elimine ese elemento de la matriz

Sí, pero parece tan largo y mi pereza no leerá todo esto. ¿Puede alguien usar esa función con el ejemplo que escribí? Lili Abedinpour
@marc sí, pero php no tiene mucha información sobre esta función, quiero ver cómo funciona, como lo quiero arriba. Lili Abedinpour
php.net/array_filter? Las funciones de PHP son bastante fáciles de encontrar, y llevan el nombre de lo que hacen ... Marc B
varias docenas de ejemplos en la página del manual, ¿qué más quieres? user557846

Tu respuesta

3   la respuesta
4

Puedes usararray_filter () con uncierre (función en línea):

<code>array_filter(
  $array,
  function ($element) use ($to_remove) {
    return strpos($element, $to_remove) === false;
  }
);
</code>

(Versión de PHP> = 5.3)

7

Puedes usararray_filter ystripos

<code>$array = array(1 => 'January', 'February', 'March');
print_r(array_filter($array, function ($var) { return (stripos($var, 'Jan') === false); }));
</code>
Oye, tengo una pregunta para ti. En lugar de hacer una nueva pregunta, primero probaré mi suerte aquí. Lo que escribiste funciona perfectamente, sin embargo, ¿cómo puedo hacerlo para eliminar específicamente 'a', por ejemplo? Porque si lo ejecuto así, también eliminará las entradas de la matriz que sonapple obanana. Si no te importa estar haciendo otra pregunta. ¿Qué pasa si las palabras que estoy buscando están en una matriz llamada $ common_words? Así que en lugar de solo 'Jan' en tu ejemplo, tengo toda una serie de palabras. Déjà vu
¿Funciona bien pero cómo deshabilitar la sensibilidad de mayúsculas para él? Lili Abedinpour
una última pregunta, ¿cómo solo devuelve matrices que contienen una cadena específica? Lili Abedinpour
buena respuesta, gracias! Lili Abedinpour
0

La forma más sencilla es conarray_filter. Esta función recibe la matriz para filtrar y una función de devolución de llamada que realiza el filtrado real en función del valor recibido:

<code>function filter_func( $v )
{
  return ( ( $var % 2 ) == 0 );
}
$test_array = array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 );
print_r( array_filter( $test_array, "filter_func" ) );
</code>

Esperanza ayudó!

Preguntas relacionadas