Написал две функции, которые могут вам пригодится: одна для вычисления ширины таблицы (глубины массива) — чтобы можно было правильно нарубить таблицу на строки, и вторая для вычисления высоты произвольной ячейки — чтобы можно было выставить rowspan. Все функции рекурсивные.
// красивооформленный массив см. в моем дополнении к вопросу
$input = array('bmw'=>array('x3'=>array('black','white','...'=>array('...'),'other'=>
array('something','something')),'x5'=>array('black','white','...'=>array('...'))),'audi'=>
array('...'=>array('...'=>array('...'))));
echo' Table dimensions: ' . arrayVizualize_tableWidth($input) . ' x ' . arrayVizualize_tableHeight($input);
echo '<br />';
echo '<b>bmw</b> rowspan is: ' . arrayVizualize_tableHeight($input['bmw']);
function arrayVizualize_tableWidth($array, $currDepth = 1) {
$maximalDepth = $currDepth;
foreach($array as $element)
if(is_array($element)) {
$elementDepth = arrayVizualize_tableWidth($element, $currDepth + 1);
if($elementDepth > $maximalDepth)
$maximalDepth = $elementDepth;
}
return $maximalDepth;
}
function arrayVizualize_tableHeight($array) {
if(!is_array($array))
return 1;
$height = 0;
foreach($array as $element) {
if(is_array($element))
$height += arrayVizualize_tableHeight($element);
else
++$height;
}
return $height;
}