检查数字中每个数字的出现情况

时间:2017-10-02 11:39:03

标签: php

这是一个用于检查数字中每个数字的出现的代码,除非并且直到输入数字中包含一个或多个0,否则它将正常工作。任何人都可以指出错误吗?

$input_num = ($_POST["number_text"]);
$freq = array();
for($i=0; $i<10; $i++) {
    $freq[$i] = 0;
}
for($k = 0; $k <= strlen($input_num); $k++) {                           
    $last = $input_num % 10;
    for($j = 0; $j < 10; $j++) {
        if($last == $j) {
            $freq[$j]++;
        }
    }
    $input_num /= 10;
}
print_r($freq);

2 个答案:

答案 0 :(得分:2)

这里有一些问题:

$input_num /= 10;

这不会达到您的预期。您每次尝试删除字符串的最后一位数字,但您所做的只是除以10,从而导致浮动。如果您传递12345,则不会以1234结束,但会使用1234.5

如果您使用

$input_num = substr($input_num, 0, -1);
那么你应该得到你想要的东西。

另一个问题是你的循环条件:

$k <= strlen($input_num);

因为您同时增加了$k的大小并减小了字符串的大小,所以您最终会在中间会议,并且只会处理一半的字符串。您需要预先存储长度,而不是在每次迭代时计算它:

$length = strlen($input_num);
for($k = 0; $k < $length; $k++) {

正如其他人在评论和答案中所说的那样,你可以对此进行其他优化(例如删除内循环),但这仍然接近你的原始&#34;算法&#34;。有些原生的方法可以更简洁地在PHP中执行此操作,但我认为您有意避开这些方法。

答案 1 :(得分:1)

为什么不使用substr_count来计算每个数字?

$input_num = '00223555';
$freq = [];

for ($i = 0; $i < 10; $i++) {
   $freq[$i] = substr_count($input_num, $i);
}

Example