【问题标题】:Counting and Totals计数和总计
【发布时间】:2011-12-07 08:48:55
【问题描述】:

我有一个用户输入的数字列表。我想数一数并得到:

  1. 每个数字的小计(只有可能的数字是1, 2, 3, 4, 5),以及
  2. 所有输入数字的总和。

见:

// Outputs the numbers , " 1 4 1 1 5  " 
// for example (no commas, order is as inputed by user)
echo $a;

#1:

if ($a == "1"){
    $b++;

    // Outputs the actual count but in steps, 
    // say there are 3 "1" then it outputs: 1 2 3 , 
    // but I only want the 3. 
    echo $b;
}

如何覆盖递增的变量?然后我就有了我想要的东西,或者我错了。有更好/更清洁的方法吗?

#2:

// outputs only a bunch of 11111 
// (the right amount if i add them up)
echo count($a);

// outputs also a bunch of 111111
print strlen($a);

还有其他方法可以计算得到总数吗(不是总和,是输入数字的总数)?

我这几天一直在尝试解决这个问题。显然,我是一个初学者,我很想了解。我检查了大约 5 本书和 php 在线手册。如果有人能引导我朝着正确的方向前进,我将不胜感激。请:)

【问题讨论】:

  • This:$a == "1" 等价于:$a == 1,由于 PHP 的 type juggling。没有理由在具有这种比较类型的数字周围添加 cmets,因为您只是将其转换为带有数字的字符串,以便与另一个也将被转换的数字/字符串进行比较;在这种情况下,PHP 将使用或不使用引号进行相同的比较。但是,使用$a === "1" 将首先检查变量的类型,然后进行比较,如果$a 不是字符串值,则会得到不同的结果。

标签: php counting


【解决方案1】:

这将满足您的要求。它将数字拆分为一个数组,使用 array_sum 计算所有元素,然后使用数组的大小来计算元素的总数。它还使用 trim 来清除用户可能输入的任何空白。

$split_numbers = explode(' ',trim($a));
$total_added = array_sum($split_numbers);
$total_numbers = sizeof($split_numbers);

您可以在here 看到此代码。

【讨论】:

  • 谢谢!不幸的是,sizeof() 和 count() 以 1111 和 explode() 的形式返回,然后 array_sum() 给我“数组总数:1”而不是数字和总数:3
  • 我在一个空文件中测试了你的代码,效果很好。但不是我的。另外,我的变量 $a 是数组的一部分,它来自爆炸。 $data = explode(' ',($abc)); $a = $data[1];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多