Php 如何将数组转置到表中?
以以下数组为例:Php 如何将数组转置到表中?,php,arrays,Php,Arrays,以以下数组为例: $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 作为表创建函数的输入,我需要将数组
$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
)
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
)
)
以下代码是我的尝试,但我无法使其完全工作:
$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(
a => 1
c => 3
e => 5
g => 7
i => 9
)
[1] => Array(
b => 2
d => 4
f => 6
h => 8
j => 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;
}
您可以使用模数运算符(
%
)确定元素应位于第一行还是第二行:
$rows = array(
'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5,
'f' => 6, 'g' => 7, 'h' => 8, 'i' => 9, 'j' => 10
);
$result = array();
$i = 0;
foreach($rows as $key => $value) {
if(!isset($result[$i % 2])) {
$result[$i % 2] = array();
}
$result[$i % 2][$key] = $value;
$i++;
}
print_r($result);
工作示例:
即使您需要更多行,也可以这样做,只需将
%2
增加到您需要的行数。您可以完全放弃!isset($result[$i%2])
check,PHP将动态创建中间数组。因此它可以这么短:请看我所做的编辑…我在输出数组的外观上犯了一个错误。有什么想法吗?