while-list дает странные значения - PullRequest
1 голос
/ 14 октября 2011

я получаю следующие сообщения из формы:

$_POST['segment'][2]
$_POST['segment'][3]
$_POST['segment'][4]
$_POST['segment'][5]

Это флажки из формы.

Не спрашивайте меня, почему, но опубликованные данные преобразуются в:$ IN ["сегмент"]

Я проверяю их с помощью:

if($IN['segment'][5])
  $podo_segment = 5;
elseif($IN['segment'][4])
   $podo_segment = 4;
elseif($IN['segment'][3])
   $podo_segment = 3;
elseif($IN['segment'][2])
   $podo_segment = 2;
else
   $podo_segment = 'NULL';

Подо означает футы:)

Затем я вставляю (самое высокое) значение в mysql.(более высокое значение означает, что включены и более низкие значения, поэтому используется только 1 поле)

Мне нужно обновить более старые значения, но используется маска, и я действительно не понимаю, как это делается, так что понятия не имеюкак преобразовать / обновить это до новых значений 2,3,4 или 5.

$segmask = 0;
while (list($a,$b)=@each($IN["segment"]))
   $segmask += pow(2,$a);

Я пробовал php.net, но не мог понять это.по крайней мере, ничего, кроме $ segmask, становится значением 2 ^ $ a.(что $ a, $ b и $ b, похоже, ничего не делают ???), но результирующие значения в mysql, например:

5, дают 32, (выглядит нормально для меня: 2 ^ 5)

Нет других вариантов, кроме 2,3,4 и / или 5, дает значения вроде:

9977932
16273612
18366668
24662092
16448
17846476
18370636
34619404
270024716
18370780
9982092
34623564
9977980
512
16386
1064964
2
37240844
35143692
1064972
9977868
16388
2148548620
269500428
2148548668
268976140
1107836940
11026444
2149072908
1589260

В конце мне нужно обновить новое поле mysql со значениями 2,3, 4 или 5 на основе этого старого поля.

Заранее благодарим за любую помощь!

1 Ответ

1 голос
/ 14 октября 2011

Мне лично не нравится структура while (list() = each()). Это выглядит грязно и запутанно, и в 99,9% случаев foreach будет выполнять ту же работу так же эффективно, если не больше.

Изменение

while (list($a,$b)=@each($IN["segment"]))
  $segmask += pow(2,$a);

до

foreach ($IN["segment"] as $key => $val)
  $segmask += pow(2, $key);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...