アカウントとサブスクリプションを格納するデータベースがあります。アカウントには、アカウントとサブスクリプションを含めることができ、3 つ以上の親レベルを持つことができます。
データベース クエリの結果の行は次のようになります。
$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
これは私がこれまでに持っているコードで、最初の 2 つのレベルで非常にうまく機能します。3 つ以上のレベルがある場合、各アカウントは自分の親しか知らないため、事態はさらに複雑になります。
$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"]);
}
私が今考えている解決策は、各反復から次の反復に基本キーを渡すことです。たとえば、前のレベルがこのレベルの 2 レベル上にある場合は、ある種の文字列置換を使用して、最後の 2 つの部分を削除します。キー。
より良いアイデアはありますか?これは、私が達成しようとしていることを行うためのくだらない方法だと確信しています。