Добрый день, дорогие формучане! Запустался в самом простом. Необходимо написать функцию поиска минимального элемента в двумерном массиве, при этом пропускать нули, если они имеются. Вот, что я написал: Код (PHP): $ab = array( array(5,0,0), array(0,4,0), array(0,2,0) ); function MinElemTarif($arr) { $min = $arr[0][0]; for ($i=0; $i < count($arr); $i++) { for ($j=0; $j < count($arr[0]); $j++) { if($arr[$i][$j]==0) continue; if($min>$arr[$i][$j]) $min=$arr[$i][$j]; } } return $min; } Она работает, отлично и пропускает нули, но до тех пор, пока я не задам первый элемент равный 0, т.е. Код (PHP): $ab = array( array(0,0,0), array(0,4,0), array(0,2,0) ); Тогда он пишет, что минимум 0,не пропуская его. Помогите, пожалуйста, разобраться. Заранее спасибо!
Код (PHP): if($min>$arr[$i][$j] || $min == 0 && $arr[$i][$j] != 0) $min=$arr[$i][$j]; Остаётся случай, когда одни нули. Ну тогда вы просто проверяете, если результат 0, значит в массиве были одни нули
можно еще так извратиться) Код (PHP): function MinElemTarif($a) { static $m = null; is_array($a) ? array_map(__FUNCTION__,$a) : ( $a>0 ? $m=( !$m ? $a : min($m,$a) ) : 0 ); return $m; }
for, __FUNCTION__ ... извращенцы. Код (Text): function array2_min(array $ab) { $min = PHP_INT_MAX; foreach($ab as $a) { foreach($a as $v) { if($v != 0 and $v < $min) { $min = $v; } } } return $min; } п.с. По хорошему, ещё бы нужна "защита от дурака".
ты тему читал? ТСу нужно найти минимальное, а нули вообще игнорить. твоя функция имеет туже проблему что и у ТСа) Добавлено спустя 2 минуты 45 секунд: исправил уже) тока зачем вообще брать первый элемент вручную. если в цикле мы все равно будем его опять обрабатывать?) не проще ли в $min положить null. а инициализировать уже внутри первым ненулевым элементом.