А если так?
$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");
}