Мое невероятно простое утверждение IF оценивается как ложное ... когда оно, несомненно, верно! - PullRequest
2 голосов
/ 27 апреля 2011
if($array[$i]['positiveOrNegative'] == 'p')

Это значение массива извлекается из БД MySQL, из столбца CHAR (1).Я var_dumped обе переменные и ОБА возвращаемая строка (1) p

Я не имею ни малейшего представления в мире, почему это не оценивается правильно, это честно поражает меня.Это работает, если я делаю p == p.Кроме того, strcmp($array[$i]['positiveOrNegative'],p) возвращает 1 (что означает, что они НЕ одинаковы).Как, черт возьми, это могло быть!?

-------- ОБНОВЛЕНИЕ:

Подожди, я, должно быть, VarDumped плохо .... сейчасМоя переменная такая:

  • $ array [$ i] ['positiveOrNegative']

  • string (4) "p"

И

  • var_dump (p)
  • string (1) "p"

Как определяется переменная pвнутри MySQL строка (4) ???

Больше обновлений ... Каждая запись в этом столбце является строкой (4), но все они состоят из одной буквы (n или p),Кроме того, они представляют собой строку (4), даже когда я вставляю письмо вручную с помощью PHPMyAdmin ...

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Вы пытались распечатать массив на экран, чтобы увидеть вывод?

print_r($array[$i]['positiveOrNegative']);

Сделав это, вы сможете увидеть все содержимое массива, и любые странности должны четко выделяться.

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

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

1 голос
/ 27 апреля 2011

Отобразите это и пропустите через od -c.Это скажет вам точно, что PHP имеет в переменной.Оттуда вы можете очистить данные и, возможно, исправить процесс вставки этих искаженных данных.

php somescript.php | od -c
0 голосов
/ 27 апреля 2011

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

print_r(array_map('ord', str_split($array[$i]['positiveOrNegative'])));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...