第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP 函數(shù)如果在循環(huán)中則返回 0

PHP 函數(shù)如果在循環(huán)中則返回 0

PHP
慕工程0101907 2023-10-15 16:49:07
我有一個簡單的 PHP 函數(shù),可以計算整數(shù)中特定數(shù)字的個數(shù)function countOccurrence($number, $digit){    $result = 0;    while ($number > 0){        $lastDigit = $number % 10;        if($lastDigit === $digit){            $result++;        }        $number = ($number - $lastDigit)/10;    }    return $result;}它本身工作得很好[用 countOccurrence(1111, 1) 測試并返回 4]但是當我在一個數(shù)字范圍的循環(huán)中使用它時,它總是返回 0。if (isset($_POST['submit'])){    $startNum = $_POST['startNum'];    $endNum = $_POST['endNum'];    $findNum = $_POST['findNum'];    $occur = 0;    echo 'from ' . $startNum . ' to ' . $endNum . ' find how many times ' . $findNum . ' occurs';    echo '<br>';    $numRange = makeArray($startNum, $endNum);    foreach ($numRange as $number){        $test = countOccurrence($number, $findNum);        echo 'number: ' . $number . ' find: ' . $findNum . ' countOccurrence('.$number.', '.$findNum.'): ' . $test . '<br>';    }    echo '<br>';    echo '<p>The digit ' . $findNum . ' occurred ' . $occur . ' times within the range</p>';    echo '<br>';    echo 'countOccurrence(1111, 1) = ';    $test = countOccurrence(1111, 1);    echo $test;}我從中得到的結果是“number: 1 find: 1 countOccurrence(1, 1): 0”等等我不太確定這里出了什么問題,因為當我手動測試該功能時它看起來沒問題
查看完整描述

2 回答

?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

function countOccurrence($number, $digit){

? ? $result = 0;

? ? while ($number > 0){

? ? ? ? $lastDigit = $number % 10;

? ? ? ? if($lastDigit === $digit){ // <-- bug is here

? ? ? ? ? ? $result++;

? ? ? ? }

? ? ? ? $number = ($number - $lastDigit)/10;

? ? }

? ? return $result;

}

由于您正在進行嚴格比較,因此這些值永遠不會相等。原因如下:

當您從 $_POST 獲取數(shù)據(jù)時,它始終是一個字符串。所以你調(diào)用countOccurrence(1111, '1')它將返回 0 :)

正如我在評論中提到的,您可以用以下函數(shù)替換您的函數(shù):

  • substr_count代替countOccurrence

  • range代替makeArray

如果您想堅持自己的職能。將輸入轉換為 int,然后使用intval將其傳遞給函數(shù)。

查看完整回答
反對 回復 2023-10-15
?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

這就是你的小怪物所在的地方……


if($lastDigit === $digit){

您在這里期望的是按值和按類型進行比較(===)。


您可以使用 gettype() 來驗證這一點;


while ($number > 0) {

    $lastDigit = $number % 10;

    echo '$lastDigit is a '.gettype($lastDigit);

    echo ' $digit is a '.gettype($digit);

    echo '<br>';


    if ($lastDigit === $digit) {

        $result++;

    }

    $number = ($number - $lastDigit) / 10;

}

來自 POST 的值始終是 String 類型。因為 $digit 是一個字符串,$lastDigit 是一個數(shù)字(整數(shù))。使用 === 將失敗,因為它們不是同一類型。


因此,由于 PHP 具有自行類型轉換的能力...將 === 更改為 == 就可以了。IE


if ($lastDigit == $digit) {

PHP 將嘗試將 RHS 值轉換為 LHS 類型,然后執(zhí)行比較。


所以現(xiàn)在您只是執(zhí)行比較,PHP 正在將 $digit 轉換為整數(shù)。


更安全的方法是強制鑄造。因此,您可以將 $digit 從字符串轉換為整數(shù),并使用現(xiàn)有的代碼。


function countOccurrence($number, $digit) {

    $result = 0;


    $digit = intval($digit); // Force $digit to be an integer

    while ($number > 0) {

        $lastDigit = $number % 10;

        echo '$lastDigit is a '.gettype($lastDigit);

        echo ' $digit is a '.gettype($digit);

        echo '<br>';

        if ($lastDigit === $digit) {

            $result++;

        }

        $number = ($number - $lastDigit) / 10;


        echo ' $number is a '.gettype($number);

    }


    return $result;

}

因此,從中吸取的教訓是,當使用 === 時,請確保您的類型也相同。


查看完整回答
反對 回復 2023-10-15
  • 2 回答
  • 0 關注
  • 130 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號