Есть ли простой способ проверить, равны ли все значения в массиве друг другу?
В этом случае он вернет false:
$array[0] = 'yes'; $array[1] = 'yes'; $array[2] = 'no';
И в этом случае, правда:
$array[0] = 'yes'; $array[1] = 'yes'; $array[2] = 'yes';
Итак, да, есть функция / метод для проверки всех значений массива сразу?
Заранее спасибо!
Не одна функция, но то же самое можно было бы добиться легко (?) С помощью:
count(array_keys($array, 'yes')) == count($array)
другой возможный вариант
if(count(array_unique($array)) == 1)
if($a === array_fill(0, count($a), end($a))) echo "all items equal!";
или лучше
if(count(array_count_values($a)) == 1)...
«Все значения одинаковы» эквивалентно «всем значениям, равным первому элементу», поэтому я бы сделал что-то вроде этого:
function array_same($array) { if (count($array)==0) return true; $firstvalue=$array[0]; for($i=1; $i<count($array); $i++) { if ($array[$i]!=$firstvalue) return false; } return true; }
Вот еще один способ сделать это, используя array_diff
со списками
В моем случае мне пришлось протестировать против массивов, у которых были все пустые строки:
$empty_array = array('','',''); // i know ahead of time that array has three elements $array_2d = array(); for($array_2d as $arr) if(array_diff($arr,$empty_arr)) // do_stuff_with_non_empty_array()
if(count(array_unique($array)) === count($array)) { // all items in $array are the same }else{ // at least one item is different }