В настоящее время я проверяю это,
if($user['medicineStudy'] == 1 || $user['thievingStudy'] == 1 || $user['miningStudy'] == 1 || $user['barterStudy'] == 1 || $user['craftingStudy'] == 1 || $user['smithingStudy'] == 1)
Но по мере того, как я добавляю значения, мне приходится вручную вводить их, нет ли способа поиска всех значений и выяснения, равны ли они 1? В массиве есть много другой информации, но значения, которые я хочу проверить, всегда заканчиваются в Study
?
$found = false; foreach ($user as $key => $val) { if ($val == 1 && substr($key, -5) == 'Study') { $found = true; echo "Found a one in ".$key; break; } } if ($found) { // do something }
Вы можете использовать array_filter
для array_filter
массива для записей правды. В вашем случае вы можете комбинировать его с preg_grep
чтобы отфильтровать интересные записи. Хотя вам понадобится array_intersect_key
решение array_intersect_key
чтобы применить его к ключам:
$true = array_filter( array_intersect_key($user, array_flip(preg_grep('/Study$/', array_keys($user)))) ); if ($true) {
function array_search_value(&$haystack, array $keys, $needle) { foreach($keys as $key) if($haystack[$key] == $needle) return true; return false; }