Intereting Posts

Проверьте, одинаковы ли все значения в массиве

Мне нужно проверить, равны ли все значения в массиве одинаковыми.

Например:

$allValues = array( 'true', 'true', 'true', ); 

Если каждое значение в массиве равно 'true' то я хочу эхо 'all true' . Если какое-либо значение в массиве равно 'false' то я хочу, чтобы эхо 'some false'

Любая идея о том, как я могу это сделать?

все значения равны тестовому значению

 if (count(array_unique($allvalues)) === 1 && end($allvalues) === 'true') { } 

или просто проверить наличие вещи, которую вы не хотите.

 if (in_array('false', $allvalues, true)) { } 

Предпочитайте последний метод, если вы уверены, что в массиве всего 2 возможных значения, так как он намного эффективнее. Но если есть сомнения, медленная программа лучше, чем некорректная программа, поэтому используйте первый метод.

Если вы не можете использовать второй метод, ваш массив очень велик, и содержимое массива, вероятно, будет иметь более 1 значения (особенно если значение, вероятно, произойдет вблизи начала массива), это может быть гораздо быстрее сделать следующее:

 function isHomogenous($arr) { $firstValue = current($arr); foreach ($arr as $val) { if ($firstValue !== $val) { return false; } } return true; } 

Если ваш массив содержит фактические логические значения (или int) вместо строк, вы можете использовать array_sum :

 $allvalues = array(TRUE, TRUE, TRUE); if(array_sum($allvalues) == count($allvalues)) { echo 'all true'; } else { echo 'some false'; } 

http://codepad.org/FIgomd9X

Это работает, потому что TRUE будет оцениваться как 1 , а FALSE0 .

Кроме того, вы можете конденсировать ответ козла в случае, если он не является двоичным:

 if (count(array_unique($allvalues)) === 1 && end($allvalues) === 'true') { // ... } 

в

 if (array_unique($allvalues) === array('foobar')) { // all values in array are "foobar" } 

Почему бы просто не сравнить счет после вызова array_unique() ?

Чтобы проверить, одинаковы ли все элементы в массиве, должно быть просто:

 $allValuesAreTheSame = (count(array_unique($allvalues)) === 1); 

Это должно работать независимо от типа значений в массиве.

Вы можете сравнить min и max … не самый быстрый способ; p

 $homogenous = ( min($array) === max($array) ); 
 $alltrue = 1; foreach($array as $item) { if($item!='true') { $alltrue = 0; } } if($alltrue) { echo("all true."); } else { echo("some false."); } 

Технически это не проверяет «какое-то ложное», оно проверяет «не все верно». Но похоже, что вы уверены, что единственные ценности, которые вы получите, – это «истина» и «ложь».

Другой вариант:

 function same($arr) { return $arr === array_filter($arr, function ($element) use ($arr) { return ($element === $arr[0]); }); } 

Применение:

 same(array(true, true, true)); // => true 
 $x = 0; foreach ($allvalues as $a) { if ($a != $checkvalue) { $x = 1; } } //then check against $x if ($x != 0) { //not all values are the same }