2010-05-21 20 views
5

Böyle (derin tek seviye) iç içe geçmiş bir dizi var:Yuvalanmış bir diziyi "ikili" nasıl dağıtabilir?

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

Ve bu forma) onu (patlamaya güzel bir yol istiyoruz:

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

ben çalıştırabilir implode(',',...)$a'daki her dizide (bu dizeleri geçici olarak depolayarak) ve sonra geçici dizinin implode('|',...) olduğunu bir döngü, ancak bu daha mantıklı bir şekilde PHP ile yapabilmem mümkün gibi görünüyor.

Şimdiden teşekkürler,
Şerefe! (Sadece kullanım işlevlerinde, bu yüzden) bir döngü yazmadan "daha kısaca" Yani By

*

+0

Bu özel görünümlü düzleştirilmiş yapının olmasını sağlamak için bir neden var mı? JSON ve seri hale getirilmiş PHP'nin her ikisi de karmaşık bir veri yapısını ayrıştırılabilir bir dizeye dönüştürmenizi sağlar. –

+0

Google Grafikler API'sı için URI oluşturuyorum. –

+0

Ah. Bu iyi bir sebep! GChartPhp'ye baktın mı? http://code.google.com/p/gchartphp/ –

cevap

8

Burada oyuna geç kaldım (SO standartlarına göre) ama kelimenin tam anlamıyla "çift"'u uygulayabilir.

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

/Bu/neden bahsediyorum! –

+0

@salathe bundan sonra bu tip verileri alıyorum ...... değerA (1), değer B (1) | değerA (2), değer B (2) ve değer A'yı (1), değer A (2) Bir sütun ve değerB (1), ikinci sütundaki değer B (2) bu olası –

+0

benim sorun çözüldü –

6

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

echo $out; 

iyi bir: Burada

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

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

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

+1 Bunu yapmanın harika bir yolu :) –

+0

Harika bir fikir. Tek uyarı, array_reduce() dizisinin arkasından elemanlar (çıktıdaki alt dizileri tersine çeviren) gibi görünmesidir. –

5

gerçekten kirli bir yoldur:

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

Kirli? Evet. Ama ben gerçekten bunu seviyorum. Birden çok cevabı kabul edebilseydim. –

+0

Bu, tek bir hata ayıklama hattı için mükemmeldir! Sadece doktor sipariş etti. – Supamic