У меня есть база данных, в которой хранятся учетные записи и подписки. Учетная запись может содержать учетные записи и подписки и иметь более трех родительских уровней.Создать многомерный массив из запроса базы данных
Строка из результата запроса базы данных выглядит так:
$array = (0 => array("level" => "2", "accountno" => "123124234", "accountname" => "Hansel", "parentaccountno" => "000213123", "subscription" => "5423213213", "username" => "Gretchen");
(Уровень 1 означает, что верхний уровень, и он будет иметь PARENTACCOUNTNO = нуль).
Из этого я пытаюсь создать многомерный массив, который выглядит примерно так:
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"]);
}
Решение, которое я имею в виду прямо сейчас, чтобы пройти базовый ключ от каждой итерации к следующей итерации, а затем, если, например, предыдущий уровень был на два уровня выше этого, просто используйте какую-то строку для замены двух последних частей ключа.
Любые лучшие идеи? Я совершенно уверен, что это дерьмовый способ сделать то, что я пытаюсь выполнить.
Это вопрос «полный мой код»? или у вас где-то ошибка? – Starx
Отсутствие ошибки, просто поиск дружеского совета по поводу того, что я застрял около недели, пытаясь найти оптимальное решение. –