2010-05-21 11 views
5

Ich habe eine verschachtelte Array (nur eine Ebene tief) wie folgt aus:Wie kann ich ein verschachteltes Array "dual" implodieren?

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

Und ich würde einen schönen Weg, es zu implodieren wie() zu dieser Form:

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

ich laufen kann eine Schleife zu implode(',',...) jedes Array in $a (Speichern dieser Zeichenfolgen in einem Temp), und dann implode('|',...) das temporäre Array, aber es scheint, als ob ich in der Lage, dies mit PHP * genauer zu tun.

Vielen Dank im Voraus,
Prost!

* Mit "prägnanten" Ich meine, ohne eine Schleife schreiben (also nur Funktionsaufrufe mit)

+0

Gibt es einen Grund, warum Sie diese angepasste flache Struktur möchten? Mit JSON und serialisiertem PHP können Sie eine komplexe Datenstruktur in eine analysierbare Zeichenfolge umwandeln. –

+0

Ich erstelle URIs für die Google Charts API. –

+0

Ah. Das ist ein guter Grund! Haben Sie sich gChartPhp angesehen? http://code.google.com/p/gchartphp/ –

Antwort

8

Ich bin zu spät zum Spiel hier (nach SO-Standards), aber Sie könnten buchstäblich "Dual" implodieren.

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

/Das ist/worüber ich spreche! –

+0

@salathe nach dieser Implodierung bekomme ich diese Art von Daten ...... valueA (1), valueB (1) | valueA (2), valueB (2) und ich muss valueA (1), valueA (2) in einer Spalte und valueB (1), valueB (2) in der zweiten Spalte ist dies möglich –

+0

mein Problem gelöst –

6

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

echo $out; 

Besser ein:

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

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

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

+1 gute Möglichkeit, es zu tun :) –

+0

Tolle Idee. Der einzige Nachteil ist, dass es so aussieht, als ob array_reduce() Elemente von der Rückseite des Arrays löscht (Umkehrung der Sub-Arrays in der Ausgabe). –

5

Hier ist ein wirklich dreckiger Weg:

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

Schmutzig? Ja. Aber ich mag es wirklich. Ich wünschte, ich könnte mehrere Antworten akzeptieren. –

+0

Dies ist perfekt für eine einzelne Debugging-Linie! Genau das, was der Arzt bestellt hat. – Supamic

Verwandte Themen