从最低值对数字数组进行排序,但使用 php 消除零值和空值


Sort array of numbers from lowest but eliminate zero and empty values using php

注意: 如果有人问这个问题,我很抱歉。 但是那些被问和回答的并没有直接解决我问题中的条件。 这就是我提出这个问题的原因。

我有这段代码,可以将我的列表从最低值到最高值排序,然后对前三个进行求和但变量不断变化

<?php $zero = 0; $one = 1;  $two = 2; $three = 3; $four = 4;   ?>
<?php 
    $arr = array($zero,$one,$two,$three,$four);
    asort($arr);                    // sort ascending, lowest first
    $tre = array_slice($arr, 0, 3);  // first three
    $sum = array_sum($tre);          // summed up
?>
<div id="result"><?php echo $sum; ?></div>

这段代码的作用是,它按升序对前三个数字求和,包括零,即

0+1+2 = 3

这不是我想要的,我希望它按升序对前三个数字求和,但忽略零,即在我的情况下

1+2+3 = 6

另外:如果代码可以消除零和空值,那可能会更好,但不是必需的

关于我如何做到这一点的任何帮助?

首先为什么要创建这么多变量,直接创建一个带有值的数组(我在我的示例中展示了)

您可以使用array_filter()从数组中删除0值:-

  <?php 
    $arr = array(0,1,2,3,4);
    $arr = array_filter($arr);      // remove 0 values
    asort($arr);                    // sort ascending, lowest first
    $tre = array_slice($arr, 0, 3);  // first three
    $sum = array_sum($tre);          // summed up
?>
<div id="result"><?php echo $sum; ?></div>

输出:- https://eval.in/534727

参考资料:- http://php.net/array_filter

或者只是更改您的代码array_slice($arr,1,3)(但它只会在您向我们显示的代码中起作用,在其他情况下不起作用):-

<?php 
    $arr = array(0,1,2,3,4);
    asort($arr);                    // sort ascending, lowest first
    $tre = array_slice($arr, 1, 3);  // first three
    $sum = array_sum($tre);          // summed up
?>
<div id="result"><?php echo $sum; ?></div>

输出:-https://eval.in/534704

试试这个:-

<?php
$arr = array(1,3,45,2,7,0,1,0);
echo removeZeroAndSumFirstThree();
function removeZeroAndSumFirstThree($arr) {
    asort($arr);
    //Remove 0 from array
    $a = array_diff($arr, array(0));
    $output = array_slice($a, 0, 3);
    return array_sum($output);
}

就个人而言,我会编写一个辅助函数来迭代可重新使用的数组:

<?php
public function sumFirstNonZeros($array){
    $countAdded = 0;
    $sum = 0;
    foreach($array as $number){
        if($countAdded<3){
            if($number > 0){
                $sum = $sum + $number;
                $countAdded = $countAdded + 1;
            }
        } else {
            break;
        }
    }
    return $sum;
}
?>
$arr = array($zero,$one,$two,$three,$four);
asort($arr);                    // sort ascending, lowest first
$sum = $i = 0;
foreach ($arr as $num) {
    if($num != 0) {
        $sum == $sum + $num;
        $i++;
    }
    if ($i == 2) {
        break;
    }
}
echo $sum;

或者你可以试试这个

$arr = array($zero, $one, $two, $three, $four);
asort($arr);                    // sort ascending, lowest first
$sumArr = array();
foreach ($arr as $num) {
    if ($num != 0) {
        $sumArr[] = $num;
        if (count($sumArr) == 3) {
            break;
        }
    }
}
echo array_sum($sumArr);

您还可以使用 array_filter() 函数从总和之前的数组中删除零值。

http://php.net/manual/en/function.array-filter.php

更通用的解决方案:

编辑:

正确的一个:

$zero = 0; $one = 1;  $two = 2; $three = 3; $four = 4;  
$arr = array($zero,$one,$two,$three,$four);
asort($arr);                    // sort ascending, lowest first
$total = 0;
$i = 0;
foreach ($arr as $v)
{
    if ($i < 3)
    {
  if ($v != 0)
  {
    var_dump($v);
    $total += $v;
    $i++;
  }
    }
}
echo $total;