No estoy seguro si te conviene, ya que es PHP> = sólo el 5,3, pero aquí hay una solución posible, usando array_walk_recursive
y un cierre(ver Anonymous functions):
$array = array(
array(1, 2, 3),
array(4, 5, 6),
array(7),
);
$result = array();
array_walk_recursive($array, function ($value, $key) use (& $result) {
$result[] = $value;
});
var_dump($result);
Y el resultado:
array
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
5 => int 6
6 => int 7
Básicamente, el cierre es la única forma en que tengo esto para wo rk: se usa para importar la variable $result
, por referencia, a la función anónima.
Y, para publicarlo, el único que tiene este trabajo para PHP 5.2 (es decir, no usar un cierre) es con esto:
$result = array();
array_walk_recursive($array, 'my_func', & $result);
var_dump($result);
function my_func($value, $key, & $result) {
$result[] = $value;
}
¿Cuál funciona también - pero levanta una advertencia:
Deprecated: Call-time pass-by-reference has been deprecated
Por desgracia, no he encontrado una manera de conseguir que esto funcione sin pasar por referencia a $result
de llamadas en tiempo :-(
(Tal vez alguien tiene una idea, acerca de cómo hacer eso?)
+1. Aunque tengo una respuesta que no usa cierres, esta fue mi primera idea de cómo hacerlo. Responder las preguntas de PHP será más divertido cuando PHP5.3 se vuelva más común. – Yacoby
@Yacoby: PHP 5.3 FTW! * (las funciones anónimas y los cierres son una cosa que me gustaría poder usar en el trabajo ... Pero estamos usando PHP 5.2 ;-() * –