2011-05-17 82 views
1

我需要检查一个数字是否是回文数字,我开始考虑可能是实现它的最佳方法,将数字转换为字符串并验证反向字符串是否相同。将字符串转换为数字并将其还原PHP

问题是,当我使用下面的代码,我得到了错误的结果。

<?PHP 

function palindrome($number){ 
     $value = strval($number); 
     $reverse_value = strrev($value); 

     if($value == strrev($value)){ 
     echo " $number is a palindrome"; 
     echo gettype($value); 
     }else{ 
      echo "$number is not a palindrome"; 
      echo $value." ".strrev($value); 
     } 
} 

$number = 90209; 


palindrome($number); 
?> 

有人可以解释我的不同吗?

+0

你会得到什么结果?当我运行这个,我得到:“90209是回文” – 2011-05-17 17:45:54

+0

你会得到什么结果?我似乎正在使用您的代码获得正确的结果。 '90209是一个回文'和'90219不是回文' – Dutchie432 2011-05-17 17:46:36

+1

似乎为我工作。我得到“90209是一个palindromestring”。 – 2011-05-17 17:46:37

回答

1

看来你有更深层次的问题,因为我只是把这些代码到IDE:

https://ideone.com/yJEz1

结果:90209 is a palindromestring

并成功推出了价值。你可能想检查你的php.ini关于改变的数学设置,或者只是在不同的上下文中再次运行代码,或者清除代码中的重复,它可能会给你正确的结果。

这里是使用(string)铸造以确保字符串类型(我从来没有使用strval()函数,我个人,我只是强制类型转换)使用相同的代码。它适用于所有三种测试用例。 https://ideone.com/4bI0O

0

它工作正常,虽然你根本没有使用$ reverse_value。

if ($value == $reverse_value) 
{ 
    ... 

你的系统说$ value和$ reverse_value实际上是什么?

0

这里是一个优化版本的作品:

function is_palindrome($value) { 
    $reverse_value = strrev($value); 

    if ($value == $reverse_value) { 
     echo print_r($value, true) . "is a palindrome. The reverse is: " . print_r($reverse_value, true) . "<br />"; 
    } 
    else { 
     echo print_r($value, true) . "is a not a palindrome. The reverse is: " . print_r($reverse_value, true) . "<br />"; 
    } 
} 

没有必要将该值转换为字符串;这会自动发生。此外,你的代码调用strrev()两次,所以我删除了多余的。