Aplicar una función para cada valor de una matriz

Considerando una variedad de cadenas:

$array = ('hello', 'hello1', 'hello2');

Necesito preg_quote($value,'/'); cada uno de los valores.

Quiero evitar usar foreach. Array walk no funciona porque también pasa la clave.

array_walk($array,'preg_quote','/'); //> Errors, third parameter given to preg_quote

¿Alguna alternativa?

preguntado el 08 de noviembre de 11 a las 14:11

¿Puedo preguntar por qué no quiere usar foreach? -

Utilizan array_map(); php.net/array-map -

5 Respuestas

Trata array_map() [Doc] con una función anónima (> = 5.3):

$array = array_map(function($value){
    return preg_quote($value, '/');
}, $array);

Demostración de trabajo

Respondido el 20 de junio de 20 a las 19:06

Ok, en este punto es mejor un simple foreach imo. Mas claro. gracias aunque aceptaremos pronto - lugar de trabajo dinámico

@ yes123 sí, también usaría foreach. - génesis

Por qué no $array = array_map('preg_quote', $array, array('/'));? Editar: no importa, el hecho de que esto funcionó para mí es una casualidad de no tener un / escapar. El segundo array simplemente está siendo ignorado. - falta de párpados

Utilizan array_map()

$newarray = array_map(function($a) {return preg_quote($a, '/');}, $input_array);

respondido 08 nov., 11:18

Puede hacer (con PHP 5.3):

array_map(function($elem) { return preg_quote($elem, '/'); }, $array);

En PHP <5.2 no hay funciones molestas (primer argumento del mapa de matriz) y en ese caso debería hacer una función global.

Respondido 20 Abr '19, 11:04

Utilizan foreach. Está hecho por esa razón. Pero si insistes:

array_walk($arr, create_function('&$val', '$val = preg_quote($val, "/");'));

Respondido el 20 de junio de 20 a las 19:06

@genesis Dejando a un lado los problemas, ¿cómo es esto más "complicado" (yo usaría complicado) que el tuyo? ¿El hecho de que esté en una sola línea? - Grant Thomas

@ Señor decepción, no estoy seguro, solo huele más desordenado para mí - génesis

La mejor solución es la devolución de llamada. A menos que use un php anterior a 5.3. - Ernestas Stankevičius

La alternativa que olvidamos mencionar es:

function user_preg_quote($key, $value) {
   return preg_quote($value, '/');
}

array_walk($array, 'user_preg_quote'); 

Pero aún así, quizás sea mejor un simple foreach.

Respondido el 20 de junio de 20 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.