2011-03-23 12 views
6

Quiero saber cómo pasar más argumentos a mi array_walk ..cómo pasar más argumentos a php array_walk?

$addresses = array('www.google.com', 'www.yahoo.com', 'www.microsoft.com'); 
$a = 'hey'; 
$b = 'hey'; 
array_walk($addresses, array($this, '_handle'), $a, $b); // $a and $b parameters doesn't get passed 

private function _handle($address,$a, $b) { 
     echo $address; // www.google.com 
     echo $a // 012 
     echo $b // 012 
} 

¿Cómo pasar parámetros de todos modos? Tengo que pasar más de 5 parámetros ... por favor, enséñame ... ¡gracias!

+2

http://php.net/array_walk –

Respuesta

15

El tercer parámetro es un tipo de datos mixto. Si tiene muchos parámetros, sugeriría ponerlos en una matriz, quizás una matriz asociativa para nombrarlos. A continuación, tendría tirar de ellos fuera de ese parámetro:

$addresses = array('www.google.com', 'www.yahoo.com', 'www.microsoft.com'); 
$params = array('first','second'); 
array_walk($addresses, array($this, '_handle'), $params); 

private function _handle($address,$count, $params) { 
     echo $address; // www.google.com 
     echo $params[0]; // first 
     echo $params[1]; // second 
} 
+1

ohh ok .. lo siento, no entiende el manual de PHP. dice userdata y no tengo idea de que sea una matriz ... gracias hombre –

+2

@Kevin: userdata * puede * ser una matriz, puede ser lo que quieras. Puede ser un int, una cadena, un objeto, una matriz, etc. Se usa una matriz para que pueda tener múltiples valores. –

4

Solo permitirá un argumento para los datos del usuario. Sugiero pasar tus valores como una matriz.

array_walk($addresses, array($this, '_handle'), array($a, $b)); 
+0

muchas gracias –

5

La función pasó a array_walk() toma 2-3 parámetros.

  1. matriz de valores (como referencia, si es necesario)
  2. conjunto de teclas
  3. datos personalizados (opcional)

Para pasar múltiples variables a array_walk pasar una matriz.

array_walk($addresses, array($this, '_handle'), array('a'=>$a, 'b'=>$b)); 

private function _handle($address, $k, $data){ 
    echo $address; 
    echo $data['a']; 
    echo $data['b']; 
} 
Cuestiones relacionadas