Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我在获取程序逻辑时遇到了一些问题_Php - Fatal编程技术网

Php 我在获取程序逻辑时遇到了一些问题

Php 我在获取程序逻辑时遇到了一些问题,php,Php,我有以下代码来反转一个数字: <?php function reverse_num($num){ $sum = 0; while(floor($num)){ $newnum = $num%10; $sum = $sum * 10 + $newnum; $num = $num/10; } return $sum; } echo re

我有以下代码来反转一个数字:

<?php 
    function reverse_num($num){
        $sum = 0;
        while(floor($num)){
            $newnum = $num%10;
            $sum = $sum * 10 + $newnum;
            $num = $num/10;
        }
        return $sum;
    }
    echo reverse_num(98);
    ?>

在这段代码中,当循环第一次初始化时,它返回8作为$sum的值。但我想知道它到底在哪里存储值?是否将$sum(在while循环上方)的值从0更改为8?你能给我一个大概的草图,它把第一次归还的钱存放在哪里吗?我的问题是,顶部初始化为0的$sum的值是保持不变,还是会发生变化,因为每当我们在顶部回显$sum时,它总是显示0。所以我们不能直接看到它是否在改变

编辑: 可以这样说吗?(见评论):


循环中,
$sum
的值正在变化。在循环之前,它被初始化为0(
$sum=0
)。循环运行时,
$sum
的值在循环的每次迭代中更改为
$sum*10+$newnum
的值

循环第一次返回8(遍历代码):

  • $newnum
    =8(98%10=8)
  • $sum
    =8((0*10)+8=8)

  • 您似乎在问sum的值何时/如何变化:请参阅下面我对您的代码的评论:

    function reverse_num($num){
    
        $sum = 0;
        while(floor($num)){
            //ON 1st iteration, sum = 0 here
            $newnum = $num%10;
            $sum = $sum * 10 + $newnum; //Once you do this, on first iteration sum changes to 8, because here $sum  = 0 * 10 + 8;
            $num = $num/10;
        }
        return $sum;
    }
    echo reverse_num(98);
    
    您可以直接使用
    strev
    功能反转数字,如下所示:

    strrev(918); // will return 819
    

    我不知道你在问什么;当为变量指定一个不同于其现有值的新值时,该变量会发生变化。使用调试器并单步执行函数,以查看哪个变量在任何时候都具有什么值。或者写出来…在调试器中逐步跟随
    $sum
    的值,或者在循环的每次迭代中回显该值…找到适合您的答案后,单击该答案旁边的勾号接受该答案。这有助于解决您的问题的其他人了解哪种解决方案有效you@AdiC,我们可以这样说吗?请看问题的编辑部分。非常感谢。我特别想知道具体的部分。是的,值在变化,但我的问题是$sum=0;(上面的while循环)变成$sum=8@Manish在循环的第二行(
    $sum=$sum*10+$newnum
    ),您正在将
    $sum
    的值从0更改为
    $sum*10+$newnum
    (8为(0x10)+8为8)。这就是为什么
    $sum
    在循环的第一次迭代后变为8。谢谢,我明白你的意思了。实际上,我想了解程序的内部逻辑。@Manish是的,在这种情况下,可以说,
    $sum
    在第一次迭代后变为8。
    strrev(918); // will return 819