[英]Check if string contains 10 digit number but space after each digit using php
[英]Check occurance of each digit in a number
這是一個檢查數字中每個數字出現的代碼,除非輸入數字中有一個或多個 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);
這里有幾個問題:
$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++) {
正如其他人在評論和答案中所說的那樣,您可以對此進行其他優化(例如,刪除內部循環),但這仍然接近您原來的“算法”。 在 PHP 中有更簡潔的本地方法可以做到這一點,但我認為您有意避開這些方法。
為什么不使用substr_count
來計算每個數字?
$input_num = '00223555';
$freq = [];
for ($i = 0; $i < 10; $i++) {
$freq[$i] = substr_count($input_num, $i);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.