[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: не работает условие &&
Страницы: 1, 2
Панч
Есть массив с кучей элементов. Каждый элемент это тоже массив.
У каждого элемента есть поля PROPERTY_TYPE и DISPLAY_TYPE
Перебираю элементы в цикле и хочу что бы не выводилось название только тех элементов, у которых поля PROPERTY_TYPE != S и DISPLAY_TYPE != F. Т.е. обязательны оба условия.

Вот код и он не работает:
if($element["PROPERTY_TYPE"] != "S" && $element["DISPLAY_TYPE"] != "F"){
echo $element["NAME"];
}


если одно из условий выполняется, то все равно выводится название.
volter9
Панч
Попробуйте так что ли (может какая та беда с != оператором):
if ($element["PROPERTY_TYPE"] !== "S" && $element["DISPLAY_TYPE"] !== "F") {
echo $element["NAME"];
}

Еще не помешало бы сделать var_dump(); самого массива, может там есть другие данные.

_____________
Мой блог
sergeiss
Вот так, наверное, судя по текстовому описанию:
if( !($element["PROPERTY_TYPE"] == "S" && $element["DISPLAY_TYPE"] == "F") ){
echo $element["NAME"];
}


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
stump
Приоритет операций можно добавить:
if( ( $element["PROPERTY_TYPE"] != "S" ) && ( $element["DISPLAY_TYPE"] != "F") )
{
echo $element["NAME"];
}


также имеет место !==
if( ( $element["PROPERTY_TYPE"] !== "S" ) && ( $element["DISPLAY_TYPE"] !== "F") )
{
echo $element["NAME"];
}


_____________
Трус не играет в хокей
twin
stump
Цитата
Приоритет операций можно добавить
И где здесь приоритет?

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
stump
Цитата (twin @ 4.03.2015 - 23:30)
stump
Цитата
Приоритет операций можно добавить
И где здесь приоритет?

Приоритет операций выделяется скобками. Сначала выполниться то, что в скобках потом остальное.

_____________
Трус не играет в хокей
twin
Здрасти, приехали... С каких это пор логические операторы и операторы сравнения стали конфликтовать по приоритетам? Матчасть учить.... бееегооом... МАРШ!

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
stump
Цитата (twin @ 4.03.2015 - 23:48)
Здрасти, приехали... С каких это пор логические операторы и операторы сравнения стали конфликтовать по приоритетам? Матчасть учить.... бееегооом... МАРШ!

Когда разберешься расскажи другим.

_____________
Трус не играет в хокей
twin
Расскажу. Тебе. Мне не лень.
Ты пытаешься свалить в одну кучу операторы с ассоциативностью и без. У оператора && левая ассоциативность, у оператора !== ассоциативности нет. А это значит, что в любом случае, со скобками или без, сначала выполнится левое сравнение, потом, только если оно true, выполнится правое. Приоритет тут можно рассматривать только у логических операторов. Допустим было бы так:
if( ( $element["PROPERTY_TYPE"] != "S"  ||  $element["DISPLAY_TYPE"] != "F") &&  $element["ACTION_TYPE"] != "A")
скобки были бы обоснованы.

Вот у логических операторов приоритет "и" выше, чем "или". Кроме того, есть приоритеты у разных форм. Оператор || имеет приоритет выше, чем OR. Интересны подробности - go в мануал. Там есть таблица приоритетов. Операторы сравнения всегда приоритетнее логических.

А ты напихал скобок туда, где компьютеру и без них все понятно. Это говнокод.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
stump
Цитата (twin @ 5.03.2015 - 00:09)
Это говнокод.

Это говномысли! Как и все другие говномысли связанные с непонятным для меня мифом о воображаемом говнокоде. Толи это результат звездной болезни то ли еще какая инфекция: не знаю.
для twin-a

Цитата
go в мануал.

Используйте скобки, даже если они не обязательны. Чаще всего это повышает читаемость кода, непосредственно определяя порядок группировки, не полагаясь на конкретные приоритет или ассоциативность оператора.
приоритет и ассоциативность оператора определеяет только группировку выражений, и не определяет порядок выполнения. PHP (в целом) не описывает в каком порядке выражение выполняется, и следует избегать код, опирающийся на порядок выполнения, так как поведение может меняться между версиями PHP в зависимости от окружающего кода.

Подчеркнутое рекомендую взять себе на заметку.

Cond1:
( ( $element["PROPERTY_TYPE"] != ( "S" || $element["DISPLAY_TYPE"] ) ) != "F" )
Cond2:
( ( $element["PROPERTY_TYPE"] != "S" ) || ( $element["DISPLAY_TYPE"] != "F" ) )

Condition 1 и Condidtion 2 содержат операторы определения приоритетов выполнения операций!

В Cond2 я явно сообщаю интерпритатору и читателям кода о порядке выполнения операций с явно указанными приоритетами которые говорят bool a = ( $element["PROPERTY_TYPE"] != "S") || bool b = ( $element["DISPLAY_TYPE"] != "F" ) c = bool a || bool b если с = правда тогда...

Если для вас официальный мануал не авторитетен go читать доп. литературу.

Я явно сообщаю интерпритатору о скобках по трем причинам: 1) чтобы любой конд можно было просмотреть с полувзгляда не вчитываясь в строку. 2) чтобы при построении конд 1 не запутаться и точно знать порядок выполнения операций. 3) чтобы точно знать порядок выполнения условия.


_____________
Трус не играет в хокей
volter9
stump
Английская версия мануала:
Цитата
Use of parentheses, even when not strictly necessary, can often increase readability of the code by making grouping explicit rather than relying on the implicit operator precedence and associativity.

И специально для Вас на Русском:
Цитата
Использование скобок, даже когда это необязательно, может повысить читабельность кода из за явной группировки нежели чем полагаться на последовательность приоритетов которое не выражено прямо и ассоциативности операторов.

Следуя из этого, скобки нужны для более явного определения приоритета (для новичков/нубов), т.е. если не знаешь приоритеты операторов и какая у них ассоциативность то тебе обязательно нужно скобки (и причем это субъективно, т.к. "can"), но если ты знаешь какие приоритеты операторов и их ассоциативность в PHP, тебе они нафиг не нужны. Скобки нужны типа в таком случае:
if (
$a === $c ||
$b == $c &&
$d != $z XOR
!$s >= $x ||
~
$y <= 100 &&
$i === $c << 0
) {
// Do something
}

Короче когда много разных операторов.

_____________
Мой блог
Zzepish
stump
как я и говорил: неадекват с завышенным чсв
vital
Цитата
так как поведение может меняться между версиями PHP в зависимости от окружающего кода

интересная фраза.
Пруф обоих ситуаций (1. Когда в разных версиях пхп разный приоритет. 2. Когда то что у меня перед ифом влияет на порядок операций в условии) или пиздюк.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
twin
stump

volter9 правильно сказал. Боже вас упаси, читать мануал на русском языке. biggrin.gif

С каких это пор лишние операторы стали повышать читабельность? От них в глазах рябит.
Цитата
Как видно, совершенство достигается не тогда, когда уже нечего прибавить, но когда уже ничего нельзя отнять.
© Antoine de Saint-Exupéry 


Цитата
Это говномысли! Как и все другие говномысли связанные с непонятным для меня мифом о воображаемом говнокоде.

Я приводл ассоциации. Говнокод, это код, от которого хочется избавиться. В данном случае даже у новичка-ламера не возникает вопросов о приоритетах. А значит скобки хочется убрать, избавиться от лишнего, ненужного. А значит сие - говнокод.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
bestxp
Вообще при сравнении строк используйте приведение к одному регистру
Ты уверен что ключи массива в верхнем регистре?
Быстрый ответ:

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