我需要检查一个数字是否是回文,我开始认为可能是最好的方法,将数字转换为字符串并验证反向字符串是否相同。
问题是,当我使用以下代码时,我得到了错误的结果。
<?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 :(得分:1)
似乎你有更深层次的问题,因为我只是将代码放入ide:
结果:90209 is a palindromestring
它成功地推出了价值。您可能想要检查关于更改的数学设置的php.ini,或者只是在不同的上下文中再次运行代码,或清除代码中的重复,它可能会给您正确的结果。
以下是使用(string)
强制转换来确保字符串类型的相同代码(我从未使用过strval()函数,就个人而言,我只是强制转换类型)。它适用于所有三个测试用例。
https://ideone.com/4bI0O
答案 1 :(得分:0)
虽然你根本没有使用$ reverse_value,但它工作正常。
if ($value == $reverse_value)
{
...
你的系统说$ value和$ reverse_value实际上是什么?
答案 2 :(得分: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()两次,所以我删除了多余的代码。