Сначала вам нужно изменить порядок массива на основе position_level
.Вы можете сделать это, просто просматривая массив и создавая новый, в котором индекс равен position_level
, а содержимое - это все строки в этой позиции.Затем вы можете использовать рекурсивную функцию для достижения того, что вы хотите.
Код (с образцами данных):
<?php
$testarray = [
[
'id' => 1,
'position_level' => 1,
'chief_id' => 9,
'full_name' => 'Verda Lubowitz 1',
'employment_start' => '1997-12-01',
'salary' => 1405,
],
[
'id' => 2,
'position_level' => 3,
'chief_id' => 9,
'full_name' => 'Verda Lubowitz 3',
'employment_start' => '1997-12-01',
'salary' => 1405,
],
[
'id' => 3,
'position_level' => 2,
'chief_id' => 9,
'full_name' => 'Verda Lubowitz 2',
'employment_start' => '1997-12-01',
'salary' => 1405,
],
[
'id' => 4,
'position_level' => 2,
'chief_id' => 9,
'full_name' => 'Verda Lubowitz 2',
'employment_start' => '1997-12-01',
'salary' => 1405,
],
];
// Initialize an empty array
$newarray = [];
// Loop through original array
foreach($testarray as $entry) {
// Append entry to $newarray[position_level]
$newarray[$entry['position_level']][] = $entry;
}
// Call the recursive function starting from level 1
draw_tree($newarray, 1);
function draw_tree($array, $startlevel) {
// No more levels, return
if(!isset($array[$startlevel])) {
return;
}
// Draw the current level
echo '<ul>';
// And its contents
foreach($array[$startlevel] as $entry) {
echo '<li>' . $entry['full_name'] . '</li>';
}
// Call the next level before closing the ul tag
draw_tree($array, $startlevel + 1);
// Close the ul tag
echo '</ul>';
}
Выход:
<ul>
<li>Verda Lubowitz 1</li>
<ul>
<li>Verda Lubowitz 2</li>
<li>Verda Lubowitz 2</li>
<ul>
<li>Verda Lubowitz 3</li>
</ul>
</ul>
</ul>
Я установилрабочий пример здесь: http://sandbox.onlinephpfunctions.com/code/da9784e8526de18f9fe34dcf859ac3feee44ad63
Обратите внимание, что эта функция не может «пропускать» уровни, поэтому, если у вас есть запись уровня 1 и уровня 3, функция будет рисовать только уровень 1, а затем возвращает,Если это так, вам нужно немного более сложное решение, но я предполагаю, что у вас нет пропущенных (пустых) уровней.