如何转换数组
array(
0 => array(
'x' => 'x1',
'y' => 'y1',
'count' => 2,
),
1 => array(
'x' => 'x3',
'y' => 'y1',
'count' => 3,
),
2 => array(
'x' => 'x3',
'y' => 'y2',
'count' => 4,
),
3 => array(
'x' => 'x1',
'y' => 'y2',
'count' => 6,
),
4 => array(
'x' => 'x2',
'y' => 'y3',
'count' => 7,
),
5 => array(
'x' => 'x2',
'y' => 'y2',
'count' => 1,
),
)
(这是 SQL 查询的结果)
进入标题数组:
array('x','y1','y2','y3')
和值数组:
array(
0 => array('x1',2,6,null),
1 => array('x2',null,1,7),
2 => array('x3',3,4,null),
)
我正在尝试使用 result set from a query并将其变成网格/表格。
(错误...抱歉,我没有使用与另一个问题完全相同的示例集)
我在想出一个好的、有效的方法来做这件事时遇到了麻烦。
header 数组应该只是字符串“x”,后跟“y”的所有不同值。为了保持一致性,我们可以按字母顺序对它们进行排序。
对于“x”的每个不同值(构成索引 0),最后一个数组应该有 1 行,并且以下索引取自第一个数组中相应 x/y 值的相应“计数”( 'y' 值由 'header' 数组中的相同索引给出)。缺失值可以是 null
或 0
。
最佳答案
不确定您是否认为这很好,但它应该是有效的。此外,您可以删除 ksort
以获得更好的效率,如果您只打算对数据进行 for
... 如果您想要 foreach
你需要把它们留在里面。
$header = array('x');
$body = array();
$row_len = 0;
foreach ($input as $cell) {
$x = (int) substr($cell['x'], 1);
$y = (int) substr($cell['y'], 1);
$row_len = max($row_len, $y); // use for null-padding rows later
$header[$y] = $cell['y'];
// Populate body
$row =& $body[$x - 1];
$row[0] = $cell['x'];
$row[$y] = $cell['count'];
}
// Fill missing nulls
foreach ($body as &$row) {
for ($i = 1; $i <= $row_len; $i++) {
if (!isset($row[$i])) {
$row[$i] = null;
}
}
// Sort rows by key (since we've treated this as assoc-array)
ksort($row);
}
// Once again, assoc arrays, you'll need to ksort
ksort($header);
ksort($body);
第一个 foreach 是关键位所在的位置..其余的是规范化你的结果数组。
关于php - 如何将此多维数组转换为带有行标题和列标题的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674681/