Оптимизировать алгоритм. Или альтернатива ему.

proWoke

Новичок
Здравствуйте я вот наконец-то придумал алгоритм для вывода стобцов. Год назад я так и не додумал и делал подобное на div'ах. Значит расту. Так вот я хочу спросить. Можно ли как-то по другому это сделать? А то мой код не особо то и читаем, я сам уже не понимаю как оно работает. Просто задача распространённая.
Надо вывести динамически такую таблицу:

http://hostingkartinok.com/show-image.php?id=7e4e381b71fb92485a7184b1d751c266

Вот как я вывожу:

PHP:
	<table class="table_partners">
		<tr>
			<? for ($t=1; $t<=$amount_of_partners; $t = $t + 4) { ?>
				<? for ($i=$t; $i<=$amount_of_partners; $i++) { ?>
					<td><img src="<?=$partners_array[$i-1]['img']?>" alt=""></td/>
					<? if ((($i % 4 == 0)) || $i == $amount_of_partners)  { echo "</tr><tr>"; break; } ?>
				<? } ?>
				<? for ($i=$t; $i<=$amount_of_partners; $i++) { ?>
					<td><?=$partners_array[$i-1]['name']?></td/>
					<? if ((($i % 4 == 0)) || $i == $amount_of_partners )  { echo "</tr><tr>"; break; } ?>
				<? } ?>
				<? for ($i=$t; $i<=$amount_of_partners; $i++) { ?>
					<td class="last_partner_td"><a href="<?=$partners_array[$i-1]['href']?>">Удалить</a></td/>
					<? if ((($i % 4 == 0)) || $i == $amount_of_partners)  { echo "</tr><tr>"; break; } ?>
				<? } ?>
			<? } ?>
			</tr>
	</table>
 

fixxxer

К.О.
Партнер клуба
А зачем такие сложности, если проще и удобнее делать на дивах?

То, что на картинке - в принципе верстается дивами, таблицы я там не вижу в упор
 

proWoke

Новичок
А зачем такие сложности, если проще и удобнее делать на дивах?
То, что на картинке - в принципе верстается дивами, таблицы я там не вижу в упор
Хороший вопрос... Ну вдруг на работе так скажут сделать, по каким то причинам. Я как бы поэтому хотел так научиться. Такое ещё и на списках li можно сделать. Тоже легко.
 

Absinthe

жожо
Ну вдруг на работе так скажут сделать, по каким то причинам.
А вдруг кто-то работающий с тобой снимет штаны и скажет на колени встать?
Таблицы при верстке крайне неудобно использовать(а, особенно, при DOM-манипуляциях), их использовали очень давно, когда не было альтернатив. Но сейчас это выглядит как будто ты сам себе намеренно создаешь проблемы.
 

fixxxer

К.О.
Партнер клуба
Чему научиться? Остаток от деления считать? Ну примерно так как у тебя это и делается, просто зачем? Ну и echo убери =)
 

Beavis

Banned
Такую вещь даже лучше делать на дивах с float: left, тогда они будут динамически распределяться по любой ширине страницы
 

fixxxer

К.О.
Партнер клуба
Инлайн-блоки зачастую уместнее. Им даже можно сделать justify :)
 

proWoke

Новичок
А вдруг кто-то работающий с тобой снимет штаны и скажет на колени встать?
Таблицы при верстке крайне неудобно использовать(а, особенно, при DOM-манипуляциях), их использовали очень давно, когда не было альтернатив. Но сейчас это выглядит как будто ты сам себе намеренно создаешь проблемы.
А если данные именно табличные? В моём примере я надуманно их использовал и они там и вправду не нужны.
 

fixxxer

К.О.
Партнер клуба
А в табличных данных у тебя есть заранее известные столбцы и строки.
 

Фанат

oncle terrible
Команда форума
лично я бы в шаблоне делал так
PHP:
<table class="table_partners">
<? foreach ($data as $chunk) { ?>
    <tr>
<?     foreach ($chunk as $row) { ?>
        <td>
            <img src="<?=$row['img']?>" alt=""><br>
            <?=$row['href']?><br>
            <a href="<?=$row['href']?>">Удалить</a>
        </td>
<?     } ?>
    </tr>
<? } ?>
</table>
хотя мог что-то упустить
 

Beavis

Banned
А где логика отображения, отвечающая за то, сколько ячеек выводится в строке?
 

Фанат

oncle terrible
Команда форума
Это моя больная мозоль :)
и в шаблоне array_chunk не напишешь, и в контроллере ему не место...

В общем, пока сижу на нейтиве, то пишу в шаблоне.
 

Beavis

Banned
Вот именно поэтому и удобнее юзать div'ы для этого, не надо ничего рассчитывать заранее :)
 

proWoke

Новичок
лично я бы в шаблоне делал так
PHP:
<table class="table_partners">
<? foreach ($data as $chunk) { ?>
    <tr>
<?     foreach ($chunk as $row) { ?>
        <td>
            <img src="<?=$row['img']?>" alt=""><br>
            <?=$row['href']?><br>
            <a href="<?=$row['href']?>">Удалить</a>
        </td>
<?     } ?>
    </tr>
<? } ?>
</table>
хотя мог что-то упустить
Так не работает же. Если имелось ввиду вот это:

PHP:
<table class="table_partners">
<? foreach ($partners_array as $chunk) { ?>
    <tr>
<?     foreach ($chunk as $row) { ?>
        <td>
            <img src="<?=$row['img']?>" alt=""><br>
            <?=$row['href']?><br>
            <a href="<?=$row['href']?>">Удалить</a>
        </td>
<?     } ?>
    </tr>
<? } ?>
</table>
То не подходит. Вот этот массив $partners_array у меня вот так выглядит:
PHP:
Array
(
    [0] => Array
        (
            [id] => 110
            [img] => /images/partners/1351128577.jpg
            [href] => http://lingvopro.abbyyonline.com/ru
            [name] => Второй
        )

    [1] => Array
        (
            [id] => 111
            [img] => /images/partners/1351128586.jpg
            [href] => http://entertainment/admin/?page=addPartner
            [name] => Третий
        )

    [2] => Array
        (
            [id] => 113
            [img] => /images/partners/1351128625.jpg
            [href] => http://entertainment/admin/?page=addPartner
            [name] => Партнёр
        )

и т.д.
Или это я что-то не понял. Не понял, как правильно использовать эти foreach циклы?
 
Сверху