Это действительный PHP? Комплексное утверждение If - PullRequest
2 голосов
/ 06 апреля 2011

Могу ли я сделать что-то вроде

if($x != (y&&z&&r&&w))

Или я должен написать это так

if($x!=y && $x!=z && $x!=r && x!=w)

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

В любом случае, у вас может быть более элегантное решение.Вот что я пытаюсь сделать.

foreach($_POST as $key => $value){
        if($key != 'category_id'){
            $cp[$key] = $value;
        }
    }

И у меня есть еще около 6 переменных для сравнения в моем выражении $ _POST, и я хотел бы сделать код красивым.По сути, это огромная форма, которую нужно форматировать в определенный массив ($ cp []) с конкретными ключами, чтобы использовать мой оператор вставки MySQL.

Какие-нибудь причудливые идеи?

Ответы [ 5 ]

4 голосов
/ 06 апреля 2011

Ваша первая часть кода:

if($x != (y&&z&&r&&w))

будет оценивать константы y, z, r и w (строки 'y', 'z', 'r' и 'w', если эти константы не существуют ) ; делая AND между каждым из них.

И тогда результат этого AND будет сравниваться с $x - который будет считаться логическим.


Итак, нет, это не совсем то, на что вы надеялись ; Вы должны использовать вторую часть кода:

if($x!=y && $x!=z && $x!=r && x!=w)

Обратите внимание, что здесь также будет выполняться поиск констант с именами y, z, r и w (или строк, если эти константы еще не существуют) - вам, вероятно, следует поставить некоторые $ перед ними, если вы ожидаете, что они будут рассматриваться как переменные.


Если вы хотите проверить, имеет ли переменная одно из нескольких значений, возможное решение состоит в том, чтобы поместить эти значения в массив, а затем использовать функцию in_array():

if (in_array($x, array(10, 20, 30) )) {
    // $x is one of those values : 10, 20, 30
}

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

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

Вам придется написать длинную форму или использовать in_array и массив, содержащий ваши значения.

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

Вы можете не сделать это так:

if($x != (y&&z&&r&&w))

Они должны быть разделены на 4 сравнения.

В качестве альтернативы, вы можете вставить значения в массив и иметь только 1 сравнение:

$skip_keys = array('a', 'b', 'c', 'd');

foreach ($_POST AS $key => $value) {
    if ( ! in_array($key, $skip_keys)) {
        // Continue
    }
}
0 голосов
/ 06 апреля 2011

Моя рекомендация, если вы выполняете это сравнение несколько раз, - написать функцию, которая проверяет ваши требования к ней. Таким образом, вы передадите свой '$ x' и сможете сравнить его со всем, что вам нужно, и получите логический результат. Функция может быть хорошо структурирована с помощью ifs и elseif, и вы сохраните свой код чище.

Итак, пример ...

<?php
// random, bad logic, but you get the idea
function validateThisThing($x) {
    $toReturn = false;
    if ($x == 'this') {
        $toReturn = true;
    } elseif ($x == 'that') {
        $toReturn = true;
    }
    return $toReturn;
}

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

0 голосов
/ 06 апреля 2011

Вы не можете сказать

if ($x != (1&&2&&3))

вот так

В ранние годы мне также было интересно, можем ли мы сделать

if (1 < $x < 5)

и ответ тоже нет. Но вы можете использовать in_array(), чтобы проверить, что-то в массиве для вас, чтобы проверить несколько значений одновременно:

http://php.net/manual/en/function.in-array.php

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