[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: разукрасить таблицу, циклы
Rimlen
Есть кусок кода, в котором в $prefix_mobile содержаться начальные цифры моб операторов.
Хочется чтобы если есть ячейки с отклонениями от этих цветов, то они имели красный цвет.

На сколько вижу, то проблема возникает в цикле:
        foreach($prefix_mobile as $mob_num) {
if (preg_match("/^$mob_num/i", "$vals")) {
echo " bgcolor=green ";
}
}

foreach делает кучу интерсаций по каждому номеру, и вот такой кусок кода просто не работает:
foreach($prefix_mobile as $mob_num) {
if (preg_match("/^$mob_num/i", "$vals")) {
echo " bgcolor=green ";
} [b] else {
echo " bgcolor=red ";[/b]
}

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

echo "<table border=1 cellpadding=0 cellspacing=0 width=800px>";
echo "<tr align=center>";
foreach($table as $k=>$v){
echo "<td>".$k."</td>";
}

$count = 0;
$prefix_mobile=array('050', '066', '095', '097', '098' ,'099');


echo "</tr><tr>";
while ($data = mysql_fetch_assoc($result)) {
echo "<tr>";
foreach($data as $key => $vals) {
if ($key == "mobile_telephone") {
echo "<td align=center ";
foreach($prefix_mobile as $mob_num) {
if (preg_match("/^$mob_num/i", "$vals")) {
echo " bgcolor=green ";
}
}

echo "<td>&nbsp $vals &nbsp</td>";
} else {
echo "<td>&nbsp $vals &nbsp</td>";
}
}

echo "</tr>";
$count++;
}
echo "</tr></table>";




Спустя 4 минуты, 33 секунды (29.01.2012 - 22:27) nugle написал(а):
это
foreach($prefix_mobile as $mob_num) {
if (preg_match("/^$mob_num/i", "$vals")) {
echo " bgcolor=green ";
} [b] else {
echo " bgcolor=red ";[/b]
}

поменяй на
foreach($prefix_mobile as $mob_num) {
if (preg_match("/^$mob_num/i", "$vals")) {
echo " bgcolor=green ";
} else {
echo " bgcolor=red ";
}

Спустя 27 минут, 50 секунд (29.01.2012 - 22:55) Rimlen написал(а):
тег '[/b]' поставлен форумом. в коде его нету.
при раскладе else у foreach будет столько интераций сколько значений в массиве, соответственно данное выражение явно не будет работать нормально.

Спустя 4 минуты, 36 секунд (29.01.2012 - 22:59) asokol написал(а):
Сменить алгоритм. :)

    foreach($data as $key => $vals) {
if ($key == "mobile_telephone") {
echo "<td align=center ";
foreach($prefix_mobile as $mob_num) {
if (preg_match("/^$mob_num/i", "$vals")) {
echo " bgcolor=green ";
}
}

echo "<td>&nbsp $vals &nbsp</td>";
} else {
echo "<td>&nbsp $vals &nbsp</td>";
}

Вот здесь, во-первых, повторяется 2 раза строчка
echo "<td>&nbsp $vals &nbsp</td>";
- почему бы ее не поставить после endif?
Во-вторых, если поставить после проверки preg_match ветку else, то в цикле будет выведено bgcolor=red, потом снова bgcolor=red и снова bgcolor=red, а только потом bgcolor=green. А для первого префикса будет первым идти green и куча red red red.
Ну и в-третьих, вот посудите сами: Вы берете каждый элемент массива $prefix_mobile и сравниваете с $vals. Но ведь все префиксы имеют одинаковую длину - 3 символа. Так почему бы не сравнивать первые 3 символа из $vals с помощью in_array?

Спустя 1 час, 11 минут, 23 секунды (30.01.2012 - 00:11) DarkLynx написал(а):
У вас все префиксы существующие известны, ну по крайней мере в коде они прописаны.. Пропишите там же их цвет, сделайте функцию которая будет возвращать цвет от входящего префикса, в цикле просто вызывайте функцию и будет у вас цвет хоть красный хоть фиолетовый..

Спустя 6 минут, 31 секунда (30.01.2012 - 00:17) neadekvat написал(а):
Я понял задачу вот так: Есть значение $val, есть массив префиксов. Если $val начинается не с одного из этих префиксов - то беда.

Мой вариант:
$val = '050312531234';
$prefix_mobile = array('050', '066', '095', '097', '098' ,'099');

if ( ! in_array(substr($val, 0, 3), $prefix_mobile))
echo 'GTFO!<br />';
else
echo 'Green card<br />';


В свой код, пардон, сам.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.