PHP множественный оператор if ... elseif - PullRequest
0 голосов
/ 13 января 2011

Это часть кода, над которым я работаю:

if($access == 2)

{

    if ($permre['pages'] == indi_add)// 
        {echo "show page";}

    if ($permre['pages'] == mass_add)// 
        {echo "show page";}

    if ($permre['pages'] == export)// 
        {echo "show page";}

}

elseif ($access == 0)

{

    if ($permre['pages'] == indi_add)// 
        {echo "dont show page";}

    if ($permre['pages'] == mass_add)// 
        {echo "dont show page";}

    if ($permre['pages'] == export)// 
        {echo "dont show page";}**

}

Я создаю страницу, где при выполнении условия, такого как $access == 2, она имеет несколько значений.Некоторые значения включают в себя: indi_add, mass_add и export.Затем я хочу использовать эти значения для создания 3 условий, как показано выше.

Однако при выполнении этого кода выполняется только первый оператор if, а остальные - нет.Есть ли где-нибудь, где я могу заставить php сразу проверить 3 оператора if и выполнить запрошенное действие?

Кроме того, я не могу использовать if(condition1 && condition2 && condition3), потому что есть вероятность, что одно из условий можетне быть удовлетворенным.

Итак, как мне выполнить все операторы, даже если первое утверждение - правда или ложь?На самом деле я получаю такие значения, как indi_add, mass_add и export из базы данных phpmyadmin.Запрос выглядит примерно так:

"выбрать страницы из доступа, где access = 2".

Из-за запроса выше я получаю значения страниц, которые являютсяупомянутое выше.Страница эха - только пример.В моей реальной кодировке, если утверждение для access == 2, если оно истинно, результат будет то, что конкретная страница будет активирована.Я пытаюсь сделать что-то вроде контроля доступа.Кроме того, за кулисами уровень доступа для каждой страницы может быть изменен администратором.Поэтому приведенный выше запрос может приносить разные результаты каждый раз, когда изменяется уровень доступа.Я надеюсь найти способ выполнить условия if, если они истинны.

Ответы [ 4 ]

3 голосов
/ 13 января 2011

Вы говорите "у него есть несколько значений". У чего имеется? потому что этот блок:

if ($permre['pages'] == indi_add)// {echo "show page";}
if ($permre['pages'] == mass_add)// {echo "show page";}
if ($permre['pages'] == export)// {echo "show page";}

Будет иметь только 1 удар. Вар. $permre['pages'] может иметь только одно значение. Разное, каждый раз, когда вы запускаете скрипт, true, но при каждом запуске одновременно не может быть «indi_add» И «mass_add».

Также: wat indi_add. Разве это не должно быть "indi_add", если это строка, или $indi_add, если это переменная?

2 голосов
/ 13 января 2011

Я бы использовал переключатель вместо всех if if

switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}
0 голосов
/ 29 сентября 2013

Возможно, я неправильно понимаю, но одна переменная не может иметь несколько значений.

Она может , однако, содержать несколько значений, если они кодируются каким-либо образом.В этом конкретном случае вы, вероятно, ищете битовые маски / флаги.

Сначала определите «значения», следя за тем, чтобы не перекрывать битовые комбинации (если это не разрешено в вашей системе значений):

define('indi_add', 0x0001);
define('mass_add', 0x0002);
define('export', 0x0004);

Теперь вы можете объединить их в переменную с помощью побитового оператора ИЛИ |:

$permre['pages'] = indi_add | mass_add;

Наконец, используйте побитовый оператор И &, чтобы проверить, содержит ли переменная один из флагов:

if ($permre['pages'] & indi_add)// 
    {echo "show page";}

if ($permre['pages'] & mass_add)// 
    {echo "show page";}

if ($permre['pages'] & export)// 
    {echo "show page";}
0 голосов
/ 13 января 2011

Я бы пошел на что-то вроде этого:

switch($access) {
  case 2:
    switch($premre['pages']) {
      case "indi_add":
      case "mass_add":
      case "export":
      echo "show page";
      break;
    }
    break;
  default:
      echo "not show page";
      break;
}

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

Редактировать: пример с добавлением кода в каждый случай по запросу OP

switch($access) {
  case 2:
    switch($premre['pages']) {
      case "indi_add":
        echo "something happens here when indi_add is run";
        doSomething();  //Runs a function for indi_add
        break;
      case "mass_add":
        echo "something happens here when mass_add is run";
        doSomethingElse();  //Runs another function for indi_add
        break;
      case "export":
        echo "show page for export";
      break;
    }
    break;
  default:
      echo "not show page";
      break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...