如何在php中获得大于0的最小正值

如何在php中获得大于0的最小正值,php,arrays,function,min,Php,Arrays,Function,Min,我想从数组中找出最小值,然后从所有元素中减去该值,直到所有元素都变为0。问题是,如果数组包含一个元素作为0,那么它不会反映任何内容。提前谢谢 <?php $handle = fopen ("php://stdin","r"); fscanf($handle,"%d",$n); $arr_temp = fgets($handle); $arr = explode(" ",$arr_temp); array_walk($arr,'intval'); for($j=0;$j<10;$j

我想从数组中找出最小值,然后从所有元素中减去该值,直到所有元素都变为0。问题是,如果数组包含一个元素作为0,那么它不会反映任何内容。提前谢谢

<?php

$handle = fopen ("php://stdin","r");
fscanf($handle,"%d",$n);
$arr_temp = fgets($handle);
$arr = explode(" ",$arr_temp);
array_walk($arr,'intval');

for($j=0;$j<10;$j++)
{
    $min = min($arr);
    for($i=0;$i<count($arr);$i++)
    {
        if($arr[$i]>=$min)
            $arr[$i]-=$min;
        echo $arr[$i]." ";
    }
    echo "\n";
}

?>

我对php了解不多,但在循环的第一个
中,您应该检查数组元素是否为零或是否使用if语句,例如
if(arr[j]!=0)

for($j=0;$j<10;$j++)
{
    if($arr[$j]!=$0)
    $min = min($arr);
    for($i=0;$i<count($arr);$i++)
    {
        if($arr[$i]>=$min)
            $arr[$i]-=$min;
        echo $arr[$i]." ";
    }
    echo "\n";
}

for($j=0;$j这是因为您每次都取了
$min=min($arr);
值,它变成了0,这就是代码不起作用的原因。 试试下面的代码

$min = min($arr);
for($j=0;$j<=100;$j++)
{
if (count(array_unique($arr)) === 1 && end($arr) === 0) {
break;
}
    for($i=0;$i<count($arr);$i++)
    {
        if($arr[$i] >= $min){
            $arr[$i]-=$min;
        echo $arr[$i]." ";
    }
    }   
 echo "<br>";
}
$min=min($arr);
对于($j=0;$j使用数组_filter(),加上函数,即使数组包含值为零的元素,也可以获得最小正非零整数,如下所示:

<?php

$arr = array(0, 1, 2, 3, 4, 0, 5, 6, 4, 3, 2, 1,0);

function getMin( $a ) {
   $arr_filtered = array_values(array_filter( $a ));
   return min($arr_filtered);

}

$min = getMin( $arr );

$count = count($arr);

while( count( array_unique($arr) ) > 1 ) {


  for( $i = 0; $i < $count;  $i++)
  {
        if( $arr[$i] >= $min ){
            $arr[$i] -= $min;
            echo $arr[$i]." ";
        }
  }   
 echo "\n";
}

显示您的代码忽略0值?如果($var==0)继续;?请参见此处:如果您的最小值为负值,然后减去负值,该怎么办?这可能是可能的,但现在我只关注正数
<?php
error_reporting(E_ALL);

$a = [   [0,1, 2, 3, 4, 0, 5, 6, 4, 3, 2, 1,0],
         [0, 2, 3, 4, 0, 5, 6, 4, 3, 2, 0],
         [0, 3, 4, 0, 5, 6, 7,8,4, 3, 0],
         [-1,0,1,2,3,4,2,1,0,-1]
     ];

function getMin( $a ) {

   return min($a);

}


foreach ($a as $arr) {
 while( ( $arr != null )  ) {
  $arr = array_values(array_filter($arr));
  if ($arr == null) {
    break;
  }
  $min = getMin( $arr );

  foreach ($arr as &$e)  {
            $e -= $min;
  }
  unset($e);
  echo join(" ",$arr),"\n";
 }
 echo "\n";
}