这是一个用于检查数字中每个数字的出现的代码,除非并且直到输入数字中包含一个或多个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);
答案 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);
}