如何转换像
这样的数组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转换为网格/表格。
(错误......抱歉,我没有使用与其他问题完全相同的示例集)
我在提出一个好的,有效的方法时遇到了麻烦。
标题数组应该是字符串“x”,后跟“y”的所有不同值。为了保持一致性,我们可以按字母顺序对它们进行排序。
对于'x'的每个不同值(构成索引0),最后一个数组应该有1行,并且对于来自第一个数组的相应x / y值,从相应的'count'获取以下索引( 'y'值由'header'数组中的相同索引给出。遗漏的值可以是null
或0
。
答案 0 :(得分:1)
不确定你是否认为这很好,但它应该是有效的。此外,如果您只计划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是关键位的位置..其余的是标准化你得到的数组。