注意: 如果有人提出这个问题,我很抱歉。但是那些被问及回答的人并没有直接解决我问题中的情况。这就是我问过它的原因。
我有这个代码可以将我的列表从最低值到最高值进行排序,然后将前三个值相加 但变量不断变化
<?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
另外:如果代码可以消除零值,也可以消除空值,它可能会好得多但不是必需的
关于我如何解决这个问题的任何帮助?
答案 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()函数在总和之前从数组中删除零值。