2010-05-21 19 views
5

que tienen una matriz anidada (sólo un nivel de profundidad) así:¿Cómo puedo implosionar "dual" una matriz anidada?

$a = array(
    array(1, 2, 3), 
    array(2, 4, 6), 
    array(5, 10, 15) 
); 

y me gustaría una buena manera de implosión() a este formulario:

1,2,3|2,4,6|5,10,15 

puedo correr un bucle a implode(',',...) cada matriz en $a (almacenando esas cadenas en una temperatura), y luego implode('|',...) esa matriz temporal, pero parece que debería poder hacer esto de forma más concisa * con PHP.

Gracias de antemano,
¡Salud!

* Por "más concisa" Quiero decir, sin necesidad de escribir un bucle (así, simplemente mediante llamadas de función)

+0

¿Hay alguna razón por la que desee esta estructura aplanada de aspecto personalizado? Porque JSON y PHP serializado le permiten convertir una estructura de datos compleja en una cadena analizable. –

+0

Estoy generando URI para la API de Google Charts. –

+0

Ah. ¡Esa es una buena razón! ¿Has mirado gChartPhp? http://code.google.com/p/gchartphp/ –

Respuesta

8

Llego tarde al juego aquí (según los estándares SO) pero literalmente puedes implosionar "dual".

implode('|', array_map('implode', array_fill(0, count($a), ','), $a)) 
+0

/¡Es/de lo que estoy hablando! –

+0

@salathe después de implosionar, obtengo datos de este tipo ... valorA (1), valorB (1) | valorA (2), valorB (2) y necesito almacenar valorA (1), valorA (2) en una columna y valueB (1), valueB (2) en la segunda columna es esto posible –

+0

mi problema resuelto –

6

function implodeComas($arr) 
{ 
    return implode(',',$arr); 
} 
$out = implode('|', array_map('implodeComas', $a)); 

echo $out; 

mejor uno:

function myImplode($ret,$current) 
{ 
    if($ret) 
     $ret .= '|'; 

    return $ret .= implode(',',$current); 
} 

echo array_reduce($a, 'myImplode'); 
+0

+1 gran manera de hacerlo :) –

+0

Gran idea. La única advertencia es que parece que array_reduce() elimina elementos de la parte posterior de la matriz (invirtiendo los subcampos en la salida). –

5

Aquí es una manera muy sucia:

str_replace('],[', '|', trim(json_encode($a), '[]')); 
+0

Sucio? Sí. Pero realmente me gusta Desearía poder aceptar respuestas múltiples –

+0

¡Esto es perfecto para una sola línea de depuración! Justo lo que recetó el doctor. – Supamic

Cuestiones relacionadas