0
看看下面的數組:如何將數組轉換爲表?
$rows = array(
'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5,
'f' => 6, 'g' => 7, 'h' => 8, 'i' => 9, 'j' => 10
);
我希望把這個表,從上到下閱讀,從左到右,像這樣:
a 1 c 3 e 5 g 7 i 9
b 2 d 4 f 6 h 8 j 10
至於輸入我的表創建功能,我需要的陣列,以被變換成一個,其中每個項目描述表中的行,如下所示:
Array(
[0] => Array(
a => 1
c => 3
e => 5
g => 7
i => 9
)
[1] => Array(
b => 2
d => 4
f => 6
h => 8
j => 10
)
下面的代碼是我的嘗試,但我不能克等它充分工作:
$cols_length = 5;
$rows_length = (int) ceil(count($rows)/$cols_length); // 2
$keys = array_keys($rows);
$values = array_values($rows);
$output = array();
for ($i = 0; $i < $rows_length; $i++) {
for ($j = 0; $j < $cols_length; $j++) {
$key = $i + ($j * $rows_length);
if (array_key_exists($key, $keys)) {
$output[$i][$keys[$i + $j]] = $values[$key];
}
}
}
print_r($output);
現在輸出:
Array(
[0] => Array
(
[c] => 1
[d] => 3
[e] => 5
[f] => 7
[g] => 9
)
[1] => Array
(
[d] => 2
[e] => 4
[f] => 6
[g] => 8
[h] => 10
)
)
我在做什麼錯?
[編輯]
謝謝您的答覆。它工作的很棒:)然而,我犯了一個錯誤。輸出陣列應構造如下:
Array (
[0] => Array (
[0] => a
[1] => 1
[2] => c
[3] => 3
[4] => e
[5] => 5
[6] => g
[7] => 7
[8] => i
[9] => 9
)
[1] => Array (
[0] => b
[1] => 2
[2] => d
[3] => 4
[4] => f
[5] => 6
[6] => h
[7] => 8
[8] => j
[9] => 10
)
)
我試圖修改代碼來支持這個輸出,但我得到奇怪的結果。我應該使用額外的$ j ++計數器嗎?
$i = 0;
foreach($rows as $key => $value) {
$result[$i++ % 2][] = $key;
$result[$i++ % 2][] = $value;
}
您完全可以放棄'!isset($ result [$ i%2])'檢查,PHP將立即創建中間數組。因此,它可以是這樣簡短的:http://codepad.org/gQW9n9ty – deceze
請參閱我編輯的編輯...我在輸出數組應該看起來像一個錯誤。有什麼想法嗎? – Pr0no