aliencash
@aliencash
Партизан

Как лучше работать с древовидной структурой на php?

Точнее говоря мне не требуется работать с ней, а нужно просто вывести данные в виде дерева...

Имеется некий текстовый файл:
1,игрушки,плюш,мишка
2,игрушки,плюш,кошка
3,игрушки,плюш,еж
4,игрушки,дерево,кубики
5,игрушки,дерево,кирпичики
6,игрушки,дерево,пентагондодекаэдры

Нужно вывести в виде дерева с подсчетом количества позиций в подкатегории:
игрушки
плюш (3)
дерево (3)

Знаний хватает только на двумерной массив... Может есть проще методы?

UPD:
if ($fh = fopen('base.csv', 'r')) {
	unset($temp);
	while (!feof($fh)) {
		$line = fgets($fh);
		$tmp = explode(',', $line);
		$temp[] = $tmp[1]; 
	}
	fclose($fh);
	$cat_tmp = array_unique($temp);

	unset($temp);
	foreach($cat_tmp as $i) {
		$fh = fopen('base.csv', 'r');
		while (!feof($fh)) {
			$line = fgets($fh);
			$tmp = explode(',', $line);
			if ($tmp[1] == $i) {
				$temp[] = $tmp[2];
				if (isset($cnt[$tmp[2]])) $cnt[$tmp[2]]++; else $cnt[$tmp[2]] = 1; 
			}
		}
		fclose($fh);
		$cat[$i] = array_unique($temp);
		unset($temp);
	}
} else {
	echo('base.csv not found!');
	exit;
}
// вывод
foreach ($cat as $key => $tmp) {
	echo($key.'<br>');
	foreach ($tmp as $i) {
		echo('&nbsp;&nbsp;&nbsp;&nbsp;'.$i.' ('.$cnt[$i].')<br>');
	}
}


UPD2:
420289165a0d46468e6e1296bfb157f3.png
Получили то, что надо

UPD3:
Под скрипты хостинг дает 60Кб памяти.
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
@OVK2015
А если так?
$sourceText = 
	"1,игрушки,плюш,мишка
2,игрушки,плюш,кошка
3,игрушки,плюш,еж
4,игрушки,дерево,кубики
5,игрушки,дерево,кирпичики
6,игрушки,дерево,пентагондодекаэдры
7,одежда,дерево,макинтош
8,одежда,твид,пиджак
9,одежда,твид,брюки";

	$sourceArray = array();
	$resultArray = array();

	$sourceText = explode("\n", $sourceText);
	foreach($sourceText as $currentStr) 
	{
		$currentStr = explode(",", $currentStr);
		array_push($sourceArray, array
			(
				"type" => $currentStr[1],
				"material" => $currentStr[2],
				"name" => $currentStr[3]
			));		
		if(array_key_exists($currentStr[1]."_".$currentStr[2], $resultArray))
		{

			$resultArray[$currentStr[1]."_".$currentStr[2]]++;	
		}
		else
		{
			$resultArray[$currentStr[1]."_".$currentStr[2]] = 1;	
		}
	}
	
	arsort($resultArray);
	
	$lastCategory = "";
	foreach ($resultArray as $key => $value) 
	{
		$currentKey = explode("_", $key);
		if($lastCategory != $currentKey[0])
		{
			$lastCategory = $currentKey[0];
			echo iconv("UTF-8", "CP866", "Категория: ".$lastCategory."\n");
		}	
		echo iconv("UTF-8", "CP866", "\tПодкатегория: '".$currentKey[1]."' Всего: ".$value."\n");					
	}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
формируем массив категорий (ключ - название, значение - количество вхождений), формируем массив строк, считаем вхождения.
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Формируем массив, перебираем, формируем новый многомерный
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы