Рекурсивная функция вложенного меню на уровне дерева PHP

#php #html

#php #HTML

Вопрос:

Я пытаюсь отобразить набор данных на уровне дерева

Например, это моя запись в базе данных

введите описание изображения здесь

Я хочу показать это как

введите описание изображения здесь

и так далее.

Конечно, приведенная выше картинка вводится вручную мной самим

  <?php 
   require 'tree.php';
   
   $tree = array(
      
	  'wwq' => array(
	  
	        'Project4' => array(
			     'phase1',
				 
				),
	       
	        'Project23' => array(
			     'phase23',
				 
				),
			
			 'Test1' => array(
			     'test1',
				 
				),
	        'Projecttest' => array(
			     'phasetest',
				  'testtest',
				) 
			
			 	
	   ),
	   
	  
	);
	
	echo treeOut($tree);
?>  

и моя функция заключается в

 <?php
function treeOut($row_Recordset1){
	$markup = '';
	foreach ($row_Recordset1 as $branch => $twig){
		$markup .= '<li>' . ((is_array($twig)) ? $branch . treeOut($twig) : $twig). '</li>';

		}
	
	return '<ul>' . $markup . '</ul>';
	
	}
?>  

Итак, мой вопрос заключается в том, как я могу превратить массив в цикл for вместо ввода ключа I в каждые данные.

Спасибо, если кто-нибудь может мне помочь!! Если у вас есть какие-либо вопросы, можете задать мне комментарий ниже.

Комментарии:

1. «мой вопрос в том, как я могу преобразовать массив в цикл for вместо ввода I в каждые данные» Я не понимаю, что изменится с циклом for? Насколько я понимаю, будете ли вы использовать for foreach цикл or, вам все равно придется вводить те же данные?

2. Да, приведенный выше массив вводится вручную самостоятельно, но я не хочу этого делать. Я хочу получить данные из цикла for. Могу ли я узнать, где я ошибаюсь?

Ответ №1:

Если речь идет о том, как вы можете подготовить массив в требуемом формате перед передачей его в treeOut() функцию, попробуйте добавить эти строки перед вызовом treeOut() :

 $tree = array();

$sql = "SELECT * FROM tbl_name ORDER BY companyName ASC, projectName ASC, phaseName ASC";
$result = mysql_query($connection, $sql);

while($data = mysql_fetch_array($result)){
    $tree[ $data['companyName'] ][ $data['projectName'] ][] = $data['phaseName'];
}

echo treeOut($tree);
  

Надеюсь, это то, что вы ищете, и поможет.

Комментарии:

1. Спасибо за помощь!!! Однако все равно появляется сообщение об ошибке Предупреждение: mysqli_query() ожидает, что параметр 1 будет mysqli

2. Измените mysqli_* на mysql_* , если вы используете старые функции mysql.

3. та же проблема, она просто изменена на предупреждение: mysql_query() ожидает, что параметр 1 будет mysql. Кроме того, я добавил глобальный, но он по-прежнему не работает