我需要有关阵列问题的帮助。
首先,我有一个数组,就像您从 sql 查询中收到的一样:
$aRows=array(
array("one" => 1, "two" => 2, "three" => 3, "a" => "4", "b" => "lala"),
array("one" => 1, "two" => 2, "three" => 3, "a" => "5", "b" => "lolo"),
array("one" => 1, "two" => 2, "three" => 3, "a" => "6", "b" => "lili")
)
然后我有另一个定义层次结构的数组 - 让我们说
$aArray=array("one", "two", "three");
现在我想构建一个分层关联数组:
$newArray =
array(
"one" => array(
"two" => array(
"three" => array(
array("a" => "4", "b" => "lala"),
array("a" => "5", "b" => "lolo"),
array("a" => "6", "b" => "lili"),
)
)
)
);
想象一个“按” sql分组,我想要分层表示。
编辑:在示例一、二、三中包含相同的值,但在现实生活中并非如此 - 假设:
select one,two,three,a,b from a_table group by one,two,three;
当然,SQL 会将一、二、三中的相等值组合在一起,这种冗余信息是无用的。但是sql不能显示分层数据,所以字段是多余的。
编辑2:感谢Waygood,完整的解决方案是:
$aRows=array(
array("one" => 1, "two" => 2, "three" => 3, "a" => "4", "b" => "lala"),
array("one" => 1, "two" => 2, "three" => 4, "a" => "5", "b" => "lolo"),
array("one" => 1, "two" => 2, "three" => 4, "a" => "6", "b" => "lili")
);
$aArray=array("one", "two", "three");
$output=array();
foreach($aRows as $row)
{
$newKey = "";
foreach($aArray as $key) // loop through the hierarchy to get the fields names
{
eval('$exist = array_key_exists(\'' . $row[$key] .
'\', $output' . $newKey . ');');
if (!$exist)
{
$newKey .= "['" . $row[$key] . "']";
eval('$output' . $newKey . '=array();');
}
}
eval('$output' . $newKey . '[]=$row;');
}
echo(var_export($output, true));