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Кб памяти.
  • Вопрос задан
  • 281 просмотр
Решения вопроса 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
Формируем массив, перебираем, формируем новый многомерный
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽