百度了一下騰訊的PHP面試題其中一個
寫一個函式來檢查使用者提交的資料是否為整數
我第一反應 哇好簡單
但是看到 (不區分資料型別,可以為二進位制、八進位制、十進位制、十六進位制數字)
咦?有區別麼?----經測試後沒啥區別 已測試C和PHP 統統到底層全轉為十進位制。
方案1---過濾器filter
function checkInt($input)
{
//var_dump($input);
if ($input === 0) echo '是';
else if( filter_var($input, FILTER_VALIDATE_INT) && !is_string($input))
echo '是'. "</br>";
else
echo '不是'. "</br>";
}
方案2 ---is_int or is_numeric
function checkInt($input)
{
//var_dump($input);
if(is_int($input) && !is_string($input))
echo '是'. "</br>";
else
echo '不是'. "</br>";
}
方案3---正則
function checkInt($input)
{
var_dump($input);
if ($input === 0) echo '是';
else if( preg_match('/^-?\\d+$/',$input) && !is_string($input))
echo '是';
else
echo '不是';
}
$input = 101.00;//浮點
checkInt($input);
$input =-101;//負整數
checkInt($input);
$input = 0b101;//二進位制
checkInt($input);
$input = 0101;//八進位制
checkInt($input);
$input = 0x101;//十六進位制
checkInt($input);
$input = "123bdc";//帶數字開頭字串
checkInt($input);
$input = "a1dcq1";//非數字開頭字串
checkInt($input);
echo is_numeric( "112312312123" ) ?'正整數':'不是正整數';
歡迎小夥伴們補充
那麼問題來了
1 在測試的時候用了
xdebug PHP 7.2.2 (cli) (built: Jan 31 2018 19:31:17) ( ZTS MSVC15 (Visual C++ 2017) x64 )
<?php
$a = 1;
xdebug_debug_zval('a');
echo PHP_EOL;
$b = $a;
xdebug_debug_zval('a');
echo PHP_EOL;
refcount 應該是 1和2啊
2 二進位制、八進位制、十進位制、十六進位制數字 怎麼在低層變成了十進位制(之前沒試過傳10進位制以外的,今天傳非10進位制的才發現)