Динамическая генерация таблиц из ini файлов

xcode

Новичок
Привет всем! Помогите пожалуйста в решении одной задачи, я в php новичок, писал только на системных языках.
Задача следующая : есть ini файл:

Код:
[columns1]

row1 = "test|type|kg"
row2 = "test|type|percent"

[columns2]
row1= "test2|type|some1"
row2= "test2|type|some2"
row2= "test2|type|some2|p10"
row2= "test2|type|some2|p100"
row2= "test2|type|some3"

[columns3]

....
который нужно распарсить и в итоге получить сгенерированную готовую таблицу на выходе примерно следующего типа:


Я думаю решить эту задачу примерно также как указано здесь :
http://hashcode.ru/answer_link/18591/
но пока не совсем представляю как такое реализовать. буду рад любым ответам. Спасибо!
 

С.

Продвинутый новичок
Нет никаких "стандартных" алгортимов для данной задачи. Надо придумать некую удобную для понимания структуру (массив в терминах РНР). Сначала распарсить входной файл в нее, а потом из нее сгенерить таблицу.
 

xcode

Новичок
спасибо за ответ, сгенерить я смогу быстро, вот нужно расспарсить, как сделать это пока вот не представляю.. если кто поможет, буду очень признателен..
 

xcode

Новичок
ок, так :

$ini_array = parse_ini_file("config.ini", true);
print_r($ini_array);
имею :
PHP:
Array
(
    [columns1] => Array
        (
            [row1] => test|type|kg
            [row2] => test|type|percent
        )

    [columns2] => Array
        (
            [row1] => test2|type|some1
            [row2] => test2|type|some3
        )

)
Во первых вырезалось :
row2= "test2|type|some2"
row2= "test2|type|some2|p10"
row2= "test2|type|some2|p100"
Во вторых как теперь сие расспарсить ? =)
 

С.

Продвинутый новичок
Вырезалось потому, что не может быть несколько элементов с одинаковым индексом. Стало быть parse_ini_file() не пойдет. Ттеперь то же самое, но ручками.
 

Фанат

oncle terrible
Команда форума
лично я бы вообще не взялся такие гипердинамические таблицы строить
 

xcode

Новичок
понятно )

[column]
row1 = "test2|type|some1"
row2 = "test2|type|some2"
row3 = "test2|type|some2|p10"
row4 = "test2|type|some2|p100"
row5 = "test2|type|some3"

сделал так все заработало =) как дальше быть ? подскажите пожалуйста как расспарсить, теперь ?
echo columns1[row1[1]] так не получается получить элемент многомерного массива =(
 

rj45

Новичок
Тут есть проблема... в ini не храниться ни ширина стобцов, ни ширина ячеек.

Т.е. ячейка test в первой строке может занимать как один стобец так и два. Где сказано что она должна быть шириной в две ячейке второй строки?

...ааа, всё, квурил, звеняюсь. P.S.: я думал я один извращаюсь с методом хранения данных и представлений.
 

xcode

Новичок
ладно давайте представим что я имею фиксированное кол-во полей и колонок.
[Colums1]

row1 = "test|kg"
row2 = "test|percent"

[Colums2]
row1 = "test2|some1"
row2 = "test2|some2"
row3 = "test2|some2|p10"
row5 = "test2|some2|p100"
row6 = "test2|some3"


PHP:
Array
(
    [Colums1] => Array
        (
            [row1] => test|kg
            [row2] => test|percent
        )

    [Colums2] => Array
        (
            [row1] => test2|some1
            [row2] => test2|some2
            [row3] => test2|some2|p10|x2
            [row4] => test2|some2|p100
            [row5] => test2|some3
        )

)
как распарсить сие дело ?
 

Фанат

oncle terrible
Команда форума
блин, это всё же ещё на 90 градусов повернуть...
я бы тогда не пытался натягивать эти колонки в одну таблицы, а делал бы разные.
тогда в цикле по массиву, и генерить таблицы.
 

Фанат

oncle terrible
Команда форума
а что ты хотел получить этим кодом? в $x у тебя массив. с массивами работают в цикле.
ещё можно, правда, наговнокодить str_replace палку на </td><td>
 

xcode

Новичок
ага, спс. я думал тут динамическое преобразование как в питоне, ладно, сделал вообщем так:
PHP:
$columns = array();

foreach ($ini_array as $keys) {
	$column = array();
	
	foreach ($keys as $key => $value) {
		if (strpos($value, "|") > 0) {
			$column[] = explode("|", $value);
		} else {
			$column[][] = $value;
		}
	}

	$columns[] = $column;
}

function maxColCount($aParams = array()){
	$count = 0;
	foreach ($aParams as $keys) {
		$count+=count($keys);
	}
	return $count;
}

function maxRowCount($aParams = array()){
	$count = 0;
	foreach ($aParams as $keys) {
		foreach ($keys as $key) {
			if ($count < count($key)) {
				$count = count($key);
			}
		}
	}
	return $count;
}

$ColCount = maxColCount($columns);

echo $RowCount = maxRowCount($columns);
вроде все в динамике высчитывается row и col. так надо теперь построить таблицу, подскажите как лучше реализовать из входящих параметров.
 

Sufir

Я не волшебник, я только учусь
Эту таблицу быстрее и привычнее в html'e написать чем в ini. А зачем тебе это вообще, если не секрет?
 
Сверху