我在获取程序逻辑方面遇到了一些问题

时间:2017-08-18 10:05:42

标签: php

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

<?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(上面的循环)的值从0更改为8?你能给我一张粗略的草图,它存储第一次返回的金额吗?我的问题是,在顶部初始化为0的$ sum的值是保持相同还是改变,因为每当我们在顶部回显$ sum时,它总是显示0.所以我们不能直接看它是否在改变?

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

<?php 
    function reverse_num($num){
        $sum = 0; //Logically this becomes $sum = 8; Is it oaky to say?
        while(floor($num)){
            $newnum = $num%10;
            $sum = $sum * 10 + $newnum;
            $num = $num/10;
        }
        return $sum;
    }
    echo reverse_num(98);
    ?>

2 个答案:

答案 0 :(得分:2)

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

循环第一次返回8(通过你的代码):

  1. $newnum = 8(98%10 = 8)
  2. $sum = 8((0 * 10)+ 8 = 8)

答案 1 :(得分:0)

您似乎在询问何时/如何更改总和的价值:请参阅我对您的代码的评论:

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);

您可以直接使用strrev功能反转该号码,如下所示:

strrev(918); // will return 819