2012-02-27 2 views
2

У меня есть массив PHP.php проверить как минимум два значения больше 0 в массиве

Скажет

$array = array(20,1,0, 0, 0,0,8); 

мне нужно проверить, является ли значения по крайней мере, буксирных доступных больше 0 в массиве. В качестве примера.

$array = array(20,1,0, 0, 0,0,8); 
// True - Above array has at least two values which is > 0 

$array = array(0,9,0, 0, 0,0,0); 
// False- Above array doesn't have at least two values which is > 0 

Я хотел бы знать, есть ли какой-либо простой способ сделать это без перебора массива.

спасибо.

+0

Возможно, вы имеете в виду «без ручного петлирования» через массив, не так ли? –

+0

Да. Без ручного цикла. –

ответ

8

Вы можете использовать array_filter(), чтобы уменьшить массив только ненулевых элементов, то рассчитывать им:

$array = array(20, 0, 0, 0, 0, 0, 0); 
$temp = array_filter($array, function($value){ 
    return $value > 0; 
}); 
echo count($temp) >= 2 ? "true" : "false"; 

Примечание: для более старых версий PHP, которые не поддерживают анонимные функции, вам нужно создать функцию отдельно и передать ее имя функции array_filter() в виде строки.

0

Вы можете использовать array_reduce или что-то подобное

function reducer($accumulator, $elem){ 
    if ($elem>0) 
     $accumulator++; 
    return $accumulator; 
} 

$array = array(9,0,0,0); 
$greater_than_zero = array_reduce($array, 'reducer', 0); 
1

без зацикливания? ну, вы могли бы

<?php 
$array = array(20,1,0, 0, 0,0,8); 
rsort($array); 
if ($array[0] > 0 && $array[1] > 0) { 
    // yippie 
} else { 
    // oh no! 
} 

но что бы не лучше, чем

<?php 
$array = array(20,1,0, 0, 0,0,8); 
$greaterThanZero = 0; 
foreach ($array as $v) { 
    if ($v > 0) { 
    $greaterThanZero++; 
    if ($greaterThanZero > 1) { 
     $greaterThanZero = true; 
     break; 
    } 
    } 
} 

if ($greaterThanZero === true) { 
    // yippie 
} else { 
    // oh no! 
} 

первое решение может быть немного меньше кода, но сортировки() является более дорогой (то есть медленнее), чем Еогеасп , Видите ли, foreach может остановиться, как только он достиг двух позитивных хитов. sort() сортирует весь массив. Ответ, предлагающий array_reduce(), также будет перемещаться по всему массиву.

Создайте свои алгоритмы таким образом, чтобы обеспечить «быстрый выход». Зачем продолжать обработку данных, когда вы уже знаете ответ? не имеет смысла, только тратит ресурсы.

2

Попробуйте этот метод, используя array_filter, это в основном фильтрует свои элементы, то вы граф искали

function positive($var) 
{ 
    // returns whether the input integer positive 
    return($var > 0); 
} 

print_r(array_filter($array, "positive")); 
Смежные вопросы