我有一个存储帐户和订阅的数据库。一个帐户可以包含帐户和订阅,并具有三个以上的父级别。
数据库查询结果中的一行如下所示:
$array = (0 => array("level" => "2", "accountno" => "123124234", "accountname" => "Hansel", "parentaccountno" => "000213123", "subscription" => "5423213213", "username" => "Gretchen");
(级别 1 表示它是顶级的,它的 PARENTACCOUNTNO = null)。
从这里我试图创建一个看起来像这样的多维数组:
accounts:
000213123
accounts:
123124234
name: Hansel
subscriptions:
5423213213
username: Gretchen
这是我到目前为止的代码,它在前两个级别上运行得非常好。当存在三个或更多级别时,事情变得更加复杂,因为每个帐户只知道自己的父级:
$hierarchy = array();
foreach ($decode as $row) {
$accountno = $row["ACCOUNTNO"];
$msisdn = $row["MSISDN"];
if ($row["PARENTACCOUNTNO"] == null)
$base_array_key = $hierarchy["accounts"];
$base_array_key[$accountno] = array("name" => $row["ACCOUNTNAME"], "accounts" => array(), "subscriptions" => array());
$hierarchy["accounts"][$accountno]["accounts"]["321323123213"] = "blaha";
if ($row["MSISDN"] != null)
$hierarchy["accounts"][$accountno]["subscriptions"][$msisdn] = array("enduser" => $row["ENDUSER"]);
}
我现在想到的解决方案是将基键从每次迭代传递到下一次迭代,然后如果例如上一个级别比这个级别高两个级别,只需使用某种字符串替换来删除最后两个部分钥匙。
有更好的想法吗?我很确定这是一种糟糕的方式来做我想要完成的事情。