Хочется чтобы если есть ячейки с отклонениями от этих цветов, то они имели красный цвет.
На сколько вижу, то проблема возникает в цикле:
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>  $vals  </td>";
} else {
echo "<td>  $vals  </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 будет столько интераций сколько значений в массиве, соответственно данное выражение явно не будет работать нормально.
при раскладе else у foreach будет столько интераций сколько значений в массиве, соответственно данное выражение явно не будет работать нормально.
Спустя 4 минуты, 36 секунд (29.01.2012 - 22:59) asokol написал(а):
Сменить алгоритм. :)
Вот здесь, во-первых, повторяется 2 раза строчка
Во-вторых, если поставить после проверки preg_match ветку else, то в цикле будет выведено bgcolor=red, потом снова bgcolor=red и снова bgcolor=red, а только потом bgcolor=green. А для первого префикса будет первым идти green и куча red red red.
Ну и в-третьих, вот посудите сами: Вы берете каждый элемент массива $prefix_mobile и сравниваете с $vals. Но ведь все префиксы имеют одинаковую длину - 3 символа. Так почему бы не сравнивать первые 3 символа из $vals с помощью in_array?
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>  $vals  </td>";
} else {
echo "<td>  $vals  </td>";
}
Вот здесь, во-первых, повторяется 2 раза строчка
echo "<td>  $vals  </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 />';
В свой код, пардон, сам.