PHP: определить, имеет ли какая-либо из дюжины переменных определенное значение

Скажем, у меня есть дюжина переменных, каждая из которых имеет значения «да / нет». Есть ли способ лучше, чем ...

if ($q1=='yes' || $q2=='yes' || $q3=='yes'...

... чтобы узнать, было ли хотя бы одно из этих значений равным да? Вот var_dump массива. Меня интересуют только значения qX

array(16) {
  ["q1"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q1"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q2"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q2"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q3"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q3"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q4"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q4"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q5"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q5"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q6"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q6"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q7"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q7"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q8"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q8"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q9"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(2) "q9"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q10"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(3) "q10"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q11"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(3) "q11"
      ["value"]=>
      string(1) "no"
    }
  }
  ["q12"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(3) "q12"
      ["value"]=>
      string(1) "no"
    }
  }
  ["fitness_test_pst"]=>
  array(1) {
    [0]=>
    array(3) {
      ["text"]=>
      string(22) "1 day PST (Bleep Test)"
      ["name"]=>
      string(16) "fitness_test_pst"
      ["value"]=>
      string(1) "1"
    }
  }
  ["pst_date"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(8) "pst_date"
      ["value"]=>
      string(8) "2-5-2018"
    }
  }
  ["location"]=>
  array(1) {
    [0]=>
    array(3) {
      ["text"]=>
      string(8) "Here or there"
      ["name"]=>
      string(8) "location"
      ["value"]=>
      string(8) "Here or there"
    }
  }
  ["confirm"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(7) "confirm"
      ["value"]=>
      string(1) "yes"
    }
  }
}

Спасибо

Зачем вам такая дюжина переменных? Почему их нет в каком-то массиве или объекте?

deceze 15.05.2018 13:33

Они находятся в массиве вместе с несколькими десятками других ключей / значений. Я помещаю их в переменные, чтобы потом использовать их для разных целей.

pee2pee 15.05.2018 14:20

@ pee2pee, это не повод для разделения массива. Если вы научитесь использовать массивы, вы увидите, насколько все станет проще. И это один из ярких примеров того, почему бы не разбить массив. Вместо этого обновите вопрос с помощью var_dump массива, и мы можем помочь вам гораздо больше, чем это.

Andreas 15.05.2018 15:08

Добавил урезанную версию var_dump

pee2pee 15.05.2018 16:40

Ответ @ pee2pee опубликован.

Andreas 15.05.2018 22:00

@ pee2pee Вы видели ответ?

Andreas 16.05.2018 21:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Буквальный ответ на этот вопрос будет примерно таким:

if (in_array('yes', [$a, $b, $c, ...]))

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

Вы можете использовать этот код для поиска массивов «q» и значений «да».

Я использую preg_grep для ключей массива, чтобы найти подмассивы с "q" .
Затем, поскольку значение является ключом, я переворачиваю массив (меняя местами ключи и значения) и использую array_intersect_keys для извлечения совпадающих подмассивов из $ arr.

Затем я использую array_column, чтобы изолировать столбец «значение».

Затем, в качестве последнего шага, я смотрю, есть ли какое-нибудь значение «да» в массиве $ values.

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

// Find all arrays with "q"
$q = array_intersect_key($arr, array_flip(preg_grep("/q\d+/", array_keys($arr))));

// From "q" array get all values
$values = array_column($q, 'value');

// See if any has 'yes'
If(in_array("yes", $values)) echo "at least one yes";

Другие вопросы по теме