Скажем, у меня есть дюжина переменных, каждая из которых имеет значения «да / нет». Есть ли способ лучше, чем ...
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"
}
}
}
Спасибо
Они находятся в массиве вместе с несколькими десятками других ключей / значений. Я помещаю их в переменные, чтобы потом использовать их для разных целей.
@ pee2pee, это не повод для разделения массива. Если вы научитесь использовать массивы, вы увидите, насколько все станет проще. И это один из ярких примеров того, почему бы не разбить массив. Вместо этого обновите вопрос с помощью var_dump массива, и мы можем помочь вам гораздо больше, чем это.
Добавил урезанную версию var_dump
Ответ @ pee2pee опубликован.
@ pee2pee Вы видели ответ?






Буквальный ответ на этот вопрос будет примерно таким:
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";
Зачем вам такая дюжина переменных? Почему их нет в каком-то массиве или объекте?