从最低排序数字数组,但使用PHP消除零和空值

时间:2016-03-11 11:17:02

标签: php arrays sorting

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

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

<?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

另外:如果代码可以消除零值,也可以消除空值,它可能会好得多但不是必需的

关于我如何解决这个问题的任何帮助?

6 个答案:

答案 0 :(得分:2)

首先要创建如此多的变量,只需直接创建一个包含值的数组(我在我的示例中显示)

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

  <?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

答案 1 :(得分:2)

试试这个: -

<?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);
}

答案 2 :(得分:1)

就个人而言,我会编写一个辅助函数来遍历可重用的数组:

<?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;
}

?>

答案 3 :(得分:1)

$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);

答案 4 :(得分:0)

更通用的解决方案:

编辑:

纠正一个:

$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;

答案 5 :(得分:0)

你也可以使用array_filter()函数在总和之前从数组中删除零值。

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