Ну как же так ?! Пустые строки не равна одна другой!

Главные вкладки

Аватар пользователя alexsaab alexsaab 27 ноября 2012 в 14:54

Я сейчас просто лопну от злости на этот код:

               
                $entity_id = 0;
                $data1[0] = (string)$data1[0];
                $a1 = (string)"";
                if (($data1[0] != $a1)) {
                    $entity_id = get_supcode_entity_id($data1[0],$term_id);
                }
                elseif (($data1[0] == $a1) || ($entity_id == 0)) {
                    $entity_id = get_supname_entity_id($data1[1],$term_id);
                }  
                print ";$data1[0];$data1[1];$data1[2];$data1[3];<br/>";

смотрим на xdebug информацию: $data1[0] = "" и a1 = ""; но почему то постоянно выполняется условие if (($data1[0] != $a1)) - ну как же так?! Они же равны! И та и другая переменная одного типа string.

В чем грабли?

С ув., Алексей

ВложениеРазмер
Иконка изображения snimok_ekrana_2012-11-27_v_14.41.00.jpg21.4 КБ

Комментарии

Аватар пользователя alexsaab alexsaab 27 ноября 2012 в 15:14

Да может это поможет? Но данные в поля берутся из файла csv, который имеет такой вид:

"art";"Name";"price";"rest"
;"Uggi Mod. 51260";113;1
;"Uggi Mod. 55601";113;7
;"Uggi Mod. 55602";113;3

Соответственно поле art пустое обычно (именно в этом файле).

Разбрираем все прадварительно: $data1 = str_getcsv($remove_file,';','"','\\');

Сдается мне что функция str_getcsv возвращает для пустых значений поля art какую-то какашку!

Что посоветуете?

С ув., Алексей

Аватар пользователя sg85 sg85 27 ноября 2012 в 15:57

По сабжу: != это не жесткое сравнение, т.е. return 0 != ""; вернет false, для жесткого это делается так === или !==, в этом случае будут учитываться и сами типы данных, но это информация к размышлению. А вообще, с чего Вы решили, что Ваша конструкция if не работает?

По коменту - ничего не понял

Аватар пользователя alexsaab alexsaab 27 ноября 2012 в 16:07

не-не-не-не

у меня никакого return 0 нет.

Пробовал менять !=, == на !== и === ну все равно не срабатывает и все...

Ставил уже условие и is_null и empty - не работает и все!

С ув., Алексей

Аватар пользователя alexsaab alexsaab 27 ноября 2012 в 16:35

продолжаем изыскания:

$aaa = strlen($data[0]);
$bbb = strlen($a1);

знаете что получается? А вот что

$aaa - длина строки 3 !!!! ????

$bbb - длина строки 0 !!!!

Блиииннн ну почему????

С ув., Алексей

Аватар пользователя alexsaab alexsaab 27 ноября 2012 в 16:43

Ага блин! Есть!

Короче в переменную $data1[0] - при работе str_getcsv, попадали символы перевода строки и возврата каретки: \n и \r

Пришлось писать такое преобразование:

$data1[0] = trim(preg_replace('/([^\pL\pN\pP\pS\pZ])|([\xC2\xA0])/u', '', $data1[0]));

trim добавил на всякий пожарный...

теперь $data1[0] это действительно "" а не "\n\r".

Вот такая история. Smile

С ув., Алексей