Я ищу для преобразования многомерного массива в другой многомерный массив с использованием рекурсивной функции.Копирование многомерного массива узлов в другой массив
Источник массив:
Array
(
[1] => Array
(
[id] => 1
[source_name] => kk56ca1d0f2378f
[company_id] => 1
[lft] => 1
[rgt] => 18
[parent_id] => 0
[children] => Array
(
[2] => Array
(
[id] => 2
[source_name] => kk56ca1d17f3f63
[company_id] => 1
[lft] => 2
[rgt] => 3
[parent_id] => 1
[children] => Array
(
)
)
[3] => Array
(
[id] => 3
[source_name] => kk56ca1d1ebe975
[company_id] => 1
[lft] => 4
[rgt] => 13
[parent_id] => 1
[children] => Array
(
[6] => Array
(
[id] => 6
[source_name] => kk56ca1fc882ac0
[company_id] => 1
[lft] => 5
[rgt] => 10
[parent_id] => 3
[children] => Array
(
)
)
)
)
)
)
)
, который мне нужно попасть в формат
Array
(
[0] => Array
(
[id] => 1
[text] => kk56ca1d0f2378f
[parent_id] => 0
[nodes] => Array
(
[0] => Array
(
[id] => 2
[text] => kk56ca1d17f3f63
[parent_id] => 1
[nodes] => Array
(
)
)
[1] => Array
(
[id] => 3
[text] => kk56ca1d1ebe975
[parent_id] => 1
[nodes] => Array
(
[0] => Array
(
[id] => 6
[text] => kk56ca1fc882ac0
[parent_id] => 3
[nodes] => Array
(
)
)
[1] => Array
(
[id] => 15
[text] => kk
[parent_id] => 3
[nodes] => Array
(
)
)
)
)
)
)
)
Я пытался в течение нескольких часов и не получать нигде с этим. Любая помощь могла бы быть полезна.
Исходный массив имеет ассоциативные индексы (хотя они являются числами), а целевой массив имеет числовые индексы. Кроме того, нужно просто удалить несколько индексов и изменить имена нескольких.
EDIT:
Специфические изменения:
- изменить имя индекса source_name к тексту
- имя индекса изменения детей к узлам
- переменные не установлены индексы LFt, РТГ, company_id
У меня нет большого опыта в рекурсии, поэтому я стараюсь бесплодно.
Это то, что я мог придумать:
// pass array of nodes
function convert_array($from){
// this is a node
if(isset($from['source_name']))
{
$temp = array();
$temp['id'] = $from['id'];
convert_array($from['children']);
}
// this is an array of nodes
else
{
foreach($from as $arr)
{
$ret = convert_array($arr);
print_r($ret);
}
}
}
Но я не могу понять, какие данные должны быть возвращены и как новый массив создает из возвращаемых значений.
Можете ли вы объяснить, что вы хотите изменить в первом массиве? Или вы просто хотите перенумеровать индексы на верхнем уровне массива? – Philip
Можете ли вы уменьшить свой пример, его трудно увидеть, чего вы хотите достичь, оба массива имеют большую разницу во многих аспектах ... –
Массивы - это не наука о ракетах. Поскольку два комментария выше меня уже сказали: «Выясните, что именно вы хотите сделать. А затем просто сделайте это;) ['foreach()'] (https://php.net/foreach) отлично подходит для массивов в PHP. И если у вас есть неизвестные измерения, найдите рекурсию. Тогда должно быть столько простых строк кода – kero