Проверьте массив значений сеанса в PHP - PullRequest
2 голосов
/ 06 марта 2010

В сеансе хранится массив пользовательских состояний. Это работает:

<?php if ($_SESSION['_app_user']['data']['state']['1']) { ?>

  <p>User has state 1</p>

<?php } ?>

Но выбор нескольких состояний не означает:

<?php if ($_SESSION['_app_user']['data']['state']['1,6,10']) { ?>

  <p>User has state 1 or 6 or 10</p>

<?php } ?>

Как проверить несколько состояний?

Ответы [ 3 ]

4 голосов
/ 06 марта 2010

Проверяя несколько.

Вам может оказаться проще сохранить наименее общий знаменатель во временной переменной:

$s = $_SESSION['_app_user']['data']['state'];
if(isset($s[1]) || isset($s[6]) || isset($s[10])) {
    echo 'Tahdah!';
}
unset($s);

Также, пожалуйста, используйте кавычки для своих строк.Это делает код более понятным и избавляет интерпретатора PHP от некоторых усилий, предполагающих, что вы имеете в виду строку вместо, скажем, константы с именем _app_user:)

1 голос
/ 06 марта 2010

Вы также можете использовать array_intersect для проверки массива состояний относительно ваших пользовательских состояний.Например:

$user_states = $_SESSION['_app_user']['data']['state'];
$check_states = array( 1, 6, 10 );

$matches = array_intersect(array_keys($user_states), $check_states);
if(!empty($matches))
{
    echo "User has valid states: \n";
    foreach($matches as $_state)
    {
        echo " - {$_state}\n";
    }
}
else
{
    echo "Sorry. Not found.";
}

Функция проверяет, совпадают ли любые два элемента в массивах, и возвращает все совпадения.Это означает, что в этом коде массив $matches будет списком всех состояний, которые пользователь имеет и находится в вашем списке.

1 голос
/ 06 марта 2010

Может быть, лучше использовать функцию «array_key_exists», чтобы проверить, существует ли данный индекс в массиве. Смотрите пример # 2 array_key_exists () против isset (). http://bg2.php.net/manual/en/function.array-key-exists.php

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