Есть ли лучшее решение для проверки многих переменных, чтобы увидеть, является ли одна из них нулевой в PHP? - PullRequest
3 голосов
/ 16 ноября 2009

В php-файле столько переменных получено $_REQUEST[] или $_POST[], и я должен проверить их в случае, если значение null с функцией isset(), это довольно хлопотно. Есть ли лучшее решение?

Ответы [ 4 ]

4 голосов
/ 16 ноября 2009

Как насчет использования комбинации in_array и array_map, например ::

// array of possible parameters that can be passed by the client
$keys = array('username','password');

// this will store the names of the ones that are not present
$missing = array();

foreach($keys as $key) {
    if(!in_array($key, $_POST)) {
        $missing[] = $key;
    }
}

$nullOffsets = array_map("is_null", $_POST);

echo 'Printing missing params:<br />';
print_r($missing);
echo 'Printing null existing params:<br />';
print_r($nullOffsets);
0 голосов
/ 16 ноября 2009

Вы можете попробовать обернуть массив в объект.

class ArrayWrapper {
    private $data;
    public function __get($var) {
    if (!isset($this->data[$var])) {
        return false;
    }
    else {
        return $this->data[$var];
    }
    }
    public function __construct($a) {
    $this->data = $a;
    }
}

$a = array('test' => 1);

$aw = new ArrayWrapper($a);

if ($aw->test != false) {
    echo "test: ".$aw->test;
}
if ($aw->foo != false) {
    echo "foo: ".$aw->foo;
}
0 голосов
/ 16 ноября 2009

Проверка пользовательского ввода хлопотна, но это неизбежное зло.

Лично я предпочитаю не использовать $_GET или $_POST, кроме копирования необходимого содержимого в мои собственные переменные для обработки.

Вверху моего .php-файла я храню массив с именами значений, которые я хочу скопировать из $_GET или $_POST

Это в сумме составляет:

// the following array needs to be modified when you change your input specs
$inputAllowed = array("name", "title", "company");
$input = array();
foreach($inputAllowed as $key)
    if( array_key_exists( $key, $_POST ) )
        $input[$key] = $_POST[$key];
    else
        $input[$key] = "";

Легко добавить туда проверку is_null с обработкой на случай, если что-то не должно быть нулевым. Или вы можете сначала позволить завершить цикл, а затем перебрать $ input

0 голосов
/ 16 ноября 2009

Если у вас есть переменные в массиве (не просто используйте массивы запроса или записи), вы можете перебрать их, вызывая функцию isset(). В зависимости от того, какой у вас текущий код, это может быть «лучше».

...