2012-01-06 40 views
2

我有以下陣列轉換二維數組爲字符串使用PHP

01 03 02 15 
05 04 06 10 
07 09 08 11 
12 14 13 16 

我想一個字符串轉換類似如下:

01,05,07,12|03,04,09,14|02,06,08,13|15,10,11,16 

誰能告訴我該怎麼做,任何幫助將不勝感激!

+0

是這樣 陣列([0]數組( [0] 01 [1] 03 [ 2] 02 [3] 15) )?? – Arfeen 2012-01-06 12:32:34

+0

但是,在這裏的所有答案(包括接受的答案)中,實際上沒有給出OP要求的實際輸出......除了Rudolph Gottesheim。 – 2012-01-06 13:17:40

回答

6

我假設你有這樣的數組:

$array = array (
    array ('01','03','02','15'), 
    array ('05','04','06','10'), 
    array ('07','09','08','11'), 
    array ('12','14','13','16') 
); 

在這種情況下,你可以這樣做:

$tmpArr = array(); 
foreach ($array as $sub) { 
    $tmpArr[] = implode(',', $sub); 
} 
$result = implode('|', $tmpArr); 
echo $result; 

See it working

+0

比我的行短一行+1 – davidethell 2012-01-06 12:37:49

+0

你在幾秒鐘內就超越了我+1。 :) – Rolice 2012-01-06 12:37:49

2
$input = array(
    array('01', '02', '03', '04'), 
    array('11', '12', '13', '14'), 
    array('21', '22', '23', '24'), 
    array('31', '32', '33', '34'), 
); 
$newArray = array(); 
foreach($input as $rowIndex => $row) { 
    foreach($row as $key => $val) { 
     if(!$newArray[$key]) { 
      $newArray[$key] = array(); 
     } 
     $newArray[$key][$rowIndex] = $val; 
    } 
} 
$strRows = array(); 
foreach($newArray as $key => $row) { 
    $strRows[$key] = join(',', $row); 
} 
$output = join('|', $strRows); 
+1

+1 - 到目前爲止唯一的解決方案,實際上提供了OP所要求的輸出......所有其他人都需要首先轉置陣列。 – 2012-01-06 13:18:34

0

鑑於你的數組作爲$ myArray,像這樣:

$newArray = array(); 
foreach ($myArray as $row) { 
    $rowValue = implode(',', $row); 
    $newArray[] = $rowValue; 
} 
$finalString = implode('|', $newArray); 
1
$input = array (
    array ('01','03','02','15'), 
    array ('05','04','06','10'), 
    array ('07','09','08','11'), 
    array ('12','14','13','16'), 
); 

echo implode('|', array_map('implode', $input, array_fill(0, count($input), ','))); 
+0

整潔....我一直在看封閉的array_reduce()解決方案,但這是一個更清潔。 – 2012-01-06 12:58:45

0

查看到目前爲止提出的解決方案,只有一個實際生成OP請求的正確輸出。

所以,從salathe的整齊轉換無恥竊取,但有一個轉置,以提供正確的結果:

$input = array ( 
    array ('01','03','02','15'), 
    array ('05','04','06','10'), 
    array ('07','09','08','11'), 
    array ('12','14','13','16'), 
); 

function transpose($array) { 
    array_unshift($array, null); 
    return call_user_func_array('array_map', $array); 
} 

$transposed = transpose($input); 

echo implode('|', array_map('implode', $transposed, array_fill(0, count($transposed), ',')));