Intereting Posts
Как получить IP-адрес пользователя в PHP? Загрузите много файлов на клиентской стороне и сжимайте их, затем загрузите файл сжатия на сервер Выберите записи со значениями до и после (но только одного) другого значения? Stripe – получить идентификатор клиента по электронной почте из формы отключить трассировку стека PHP Как отсортировать массив по определенному ключу? Laravel 5.3 Тесные отношения Пример использования MySQL LEFT JOIN как подключиться к базе данных на другом сервере пошаговые инструкции по установке IMAGEMAGICK на WAMP? Включить проверку клиента Yii получить текущий идентификатор страницы внутри страницы плагина wordpress Как получить имена столбцов вместе с набором результатов в php / mysql? Одновременное использование переключателей и выпадающего селектора для вариантов продукта Как вы используете Javascript для дублирования полей формы?

Самый простой способ чередовать цвета строк в PHP / HTML?

Вот мой пример PHP. Может ли кто-нибудь найти более короткий / более простой способ сделать это?

<? foreach($posts as $post){?> <div class="<?=($c++%2==1)?'odd':NULL?>"> <?=$post?> </div> <? }?> <style> .odd{background-color:red;} </style> 

Примерами других языков было бы интересно посмотреть также.

По существу – нет. Это примерно так же просто, как и получается. Вы можете переписать его немного короче / чище, но идея будет такой же. Вот как я это написал:

 $c = true; // Let's not forget to initialize our variables, shall we? foreach($posts as $post) echo '<div'.(($c = !$c)?' class="odd"':'').">$post</div>"; 

Если вы хотите иметь меньше встроенного PHP, отличный способ сделать это через JavaScript.

Используя jQuery, это просто:

 <script type="text/javascript"> $('div:odd').css('background-color', 'red'); </script> 

Используя CSS3, вы можете сделать что-то вроде этого:

 div:nth-child(odd) { background-color: red } 

Но лучше не использовать это в течение нескольких лет, если вы действительно хотите, чтобы ваши пользователи увидели цвет …

Smarty имеет встроенный:

 {section name=rows loop=$data} <tr class="{cycle values="odd,even"}"> <td>{$data[rows]}</td> </tr> {/section} 

Так же Django:

 {% for o in some_list %} <tr class="{% cycle 'row1' 'row2' %}"> ... </tr> {% endfor %} 

Я всегда называю мои строки зебры «row0» и «row1» – это делает код немного проще.

 <?php // you should always use the full opening tag for compatibility $i = 0; foreach ($rows as $row) { echo '<tr class="row' . ($i++ % 2) . '">...</tr>'; } ?> 

Может быть, функция со статической переменной?

 <?php function alternate_row_color($css_class) { static $show = true; $show = !$show; if ($show) { return $css_class; } else { return NULL; } } ?> 

Затем, чтобы использовать его (используя ваш пример):

 <?php foreach($posts as $post) { ?> <div class="<?=alternate_row_color('odd')?>"> <?=$post?> </div> <?php } ?> 

Вы можете инкапсулировать логику следующим образом:

 <?php class ListCycler { private $cols, $offs, $len; // expects two or more string parameters public function __construct() { $this->offs = -1; $this->len = func_num_args(); $this->cols = func_get_args(); foreach($this->cols as &$c) $c = trim(strval($c)); } // the object auto-increments every time it is read public function __toString() { $this->offs = ($this->offs+1) % $this->len; return $this->cols[ $this->offs ]; } } ?> <html> <head> <style> ul#posts li.odd { background-color:red; } ul#posts li.even { background-color:white; } </style> </head> <body> <div> <h3>Posts:</h3> <ul id="posts"><?php $rc = new ListCycler('odd','even'); foreach($posts as $p) echo "<li class='$rc'>$p</li>"; ?></ul> </div> </body> </html> 

Просто для удовольствия

Предполагая, что вы можете использовать селектор CSS3, вы можете сделать что-то вроде

 <div class="posts"> <? foreach($posts as $post){?> <div> <?=$post?> </div> <? }?> </div> <style> div.posts div:odd{background-color:red;} </style> 

Даже с поддержкой CSS2 и mootools (javascript library) вы можете заменить стиль на этот javascript

 <script type="text/javascript"> // obviously this script line should go in a js file in a onload (or onDomReady) function $$('div.posts div:odd').setStyle('background-color','red'); </script> 

Если у вас нет ничего, кроме php a, вы можете упростить бит код с помощью массива

 <? $isodd=array('','odd'); $c=0; foreach($posts as $post){?> <div class="<?=$isodd[$c++%2]?>"> <?=$post?> </div> <? }?> 

Это достаточно коротко, но я бы, вероятно, включил его в какую-то вспомогательную функцию с четким именем. Таким образом, более очевидно, что происходит, и вам не придется повторять эту логику во всех шаблонах, где вам это нужно.

 <?php $alt = true; foreach ($posts as $post): $alt = !$alt; ?> <div<?php echo $alt ? ' class="odd"' : ''; ?>> <!-- Content --> </div> <?php endforeach ?> 

Было бы самым простым и ясным способом сделать это.

Если вы хотите сделать это на конце дисплея, и вам удобнее или иначе уже использовать javascript, библиотеки, такие как jQuery, часто будут иметь : нечетные и даже селекторные элементы, которые затем можно подключить к добавлению определенных свойств стиля или подключиться к CSS в целом путем добавления классов .

На стороне noe, чтобы чередовать два значения a и b , хороший способ сделать это в цикле:

 x = a; while ( true ) { x = a + b - x; } 

Вы также можете делать это без сложения и вычитания:

 x = a ^ b ^ x; 

где ^ – операция XOR.

Если вы просто хотите чередовать между 0 и 1, вы можете сделать это:

 x = 0; while ( true ) { x = !x; } 

Разумеется, вы можете использовать x как индекс цветов, классы стиля CSS и так далее.

 function row_color($cnt,$even,$odd) { echo ($cnt%2) ? "<tr bgcolor=\"$odd\">" : "<tr bgcolor=\"$even\">"; } 

Как использовать:

 $cnt=0; while ($row = mysql_fetch_array ($result)) { row_color($cnt++,"e0e0e0","FFFFFF"); } 

Вы можете использовать глобальную область $ GLOBAL для хранения текущего выбранного состояния класса, см. Ниже функцию table_row_toggle (). Да, я знаю, что он грязный, чтобы злоупотреблять $ GLOBAL scope, но эй, мы здесь, чтобы исправить проблемы, не так ли? 🙂

Вызов функции переключения строки таблицы в HTML:

 <tr <? table_row_toggle(); ?>> 

Функция в PHP:

 /* function to toggle row colors in tables */ function table_row_toggle() { /* check if $trclass is defined in caller */ if(array_key_exists('trclass', $GLOBALS)) { $trclass = $GLOBALS['trclass']; } /* toggle between row1 and row2 */ if(!isset($trclass) || $trclass == 'row2') { $trclass = 'row1'; } else { $trclass = 'row2'; } /* set $trclass in caller */ $GLOBALS['trclass'] = $trclass; /* write the desired class to the caller */ echo ' class="' . $trclass . '"'; } 
  <?php ($i%2==1) ? $bgc='#999999' : $bgc='#FFFFFF'; ?> '<div bgcolor=" bgcolor='.$bgc.'">'; 

Пятно на Vilx, но всегда идет минимально для скорости (вес страницы)

 <tr class="'.(($c = !$c)?'odd':'even').'"> 

Использую что-то вроде этого:

 <?php function cycle(&$arr) { $arr[] = array_shift($arr); return end($arr); } $oddEven = array('odd', 'even'); echo cycle($oddEven)."\n"; echo cycle($oddEven)."\n"; echo cycle($oddEven)."\n"; 

Простая небольшая функция, которая хорошо работает для меня.

  <?php class alternating_rows() { private $cycler = true; //------------------------------------------------------------------------------ function rowclass($row0,$row1) { $this->cycler = !$this->cycler;//toggle the cycler $class=($this->cycler)?$row0:$row1; return $class; }// end function rowclass //------------------------------------------------------------------------------ }//end class alternating rows ?> <?php $tablerows= new alternating_rows();?> <table> <tr> <th scope="col">Heading 1</th> <th scope="col">Heading 2</th> </tr> <?php foreach ($dataset as $row){?> <tr class="<?php echo $tablerows->rowclass("oddrow","evenrow"); ?>"> <td>some data</td> <td>some more data</td> </tr> <?php } //end foreach?> </table> 

В PHP я использую этот код:

 function alternate($sEven = "even", $sOdd = "odd") { static $iCount; return ($iCount++ & 1) ? $sOdd :$sEven; } for($i = 0; $i< 5; $i++) echo alternate(); /*output: even odd even odd even */ 

Источник: http://sklueh.de/2013/11/einfache-alternierung-mit-php/