注意: 如果有人问这个问题,我很抱歉。 但是那些被问和回答的并没有直接解决我问题中的条件。 这就是我提出这个问题的原因。
我有这段代码,可以将我的列表从最低值到最高值排序,然后对前三个进行求和但变量不断变化
<?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;