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

  • Автор темы Автор темы proWoke
  • Дата начала Дата начала

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>
 
А зачем такие сложности, если проще и удобнее делать на дивах?

То, что на картинке - в принципе верстается дивами, таблицы я там не вижу в упор
 
А зачем такие сложности, если проще и удобнее делать на дивах?
То, что на картинке - в принципе верстается дивами, таблицы я там не вижу в упор
Хороший вопрос... Ну вдруг на работе так скажут сделать, по каким то причинам. Я как бы поэтому хотел так научиться. Такое ещё и на списках li можно сделать. Тоже легко.
 
Ну вдруг на работе так скажут сделать, по каким то причинам.
А вдруг кто-то работающий с тобой снимет штаны и скажет на колени встать?
Таблицы при верстке крайне неудобно использовать(а, особенно, при DOM-манипуляциях), их использовали очень давно, когда не было альтернатив. Но сейчас это выглядит как будто ты сам себе намеренно создаешь проблемы.
 
Чему научиться? Остаток от деления считать? Ну примерно так как у тебя это и делается, просто зачем? Ну и echo убери =)
 
Такую вещь даже лучше делать на дивах с float: left, тогда они будут динамически распределяться по любой ширине страницы
 
Инлайн-блоки зачастую уместнее. Им даже можно сделать justify :)
 
А вдруг кто-то работающий с тобой снимет штаны и скажет на колени встать?
Таблицы при верстке крайне неудобно использовать(а, особенно, при DOM-манипуляциях), их использовали очень давно, когда не было альтернатив. Но сейчас это выглядит как будто ты сам себе намеренно создаешь проблемы.
А если данные именно табличные? В моём примере я надуманно их использовал и они там и вправду не нужны.
 
А в табличных данных у тебя есть заранее известные столбцы и строки.
 
лично я бы в шаблоне делал так
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>
хотя мог что-то упустить
 
А где логика отображения, отвечающая за то, сколько ячеек выводится в строке?
 
Это моя больная мозоль :)
и в шаблоне array_chunk не напишешь, и в контроллере ему не место...

В общем, пока сижу на нейтиве, то пишу в шаблоне.
 
Вот именно поэтому и удобнее юзать div'ы для этого, не надо ничего рассчитывать заранее :)
 
лично я бы в шаблоне делал так
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 циклы?
 
Сверху