phpif負數
1. php 怎樣將有范圍的ip轉化為整型範圍
<?php
$ip=$_SERVER["REMOTE_ADDR"];//獲取客戶端IP
$longip=ip2long($ip);
//程序員通常將IP轉換成整形寫入資料庫
//讀取的時候再把它轉成標準的IP地址
$ip=long2ip($longip);
echo'<pre>';
print_r(array($longip=>$ip));
?>
2. php 如何將數字 負號去除
給你個示例吧
$num = -10222.00;
if (strripos($num, "-") < 0) { //$num中沒有負號
echo "正數";
} else { //$num中有負號
$num = str_replace("-", "", $num);
echo "負數,已經截去負號";
}
3. php 正則表達式如何判斷一個字元串是否為合法的四則數學算式
代碼如下(經測通過):
<?php
$str="((1+1)*3.3)/10-12+(1+1)";
if(preg_match("/[+-*/.]{2}|[^+-*/()d.]+/i",$str,$matches)){
echo'非法算式';
}else{
if(substr_count($str,"(")==substr_count($str,")")){
echo'合法算式';
}else{
echo'括弧不匹配';
}
}
?>
判斷str里是否存在連續運算符、小數點或運算符、括弧、數字以外的字元
若存在則非法
若不存在則判斷str里( 和 )數量是否一致
4. PHP中使用substr截取字元串出現中文亂碼問題該怎麼辦
在PHP程序開發中,經常會執行字元串的截取操作,比如輸出信息列表時,標題不宜過長,列印文章摘要時,也要執行一系列的字元串截取操作。遇到這些需求時,我春皮們經常會想到使用substr()方法來實現,substr()對全英文字元串的截取是比較適合的。
但字元串只要出現中文字元,就有可能導致PHP
substr中文亂碼,因為中文UTF-8編碼,每個漢字佔3位元組,而GB2312佔2位元組,英文佔1位元組,截取位數不準確,substr()硬生生地將
一個中文字元「鋸」成兩半,造成斷開的字元會把其後的..拉過來一起做一個字,所以出現了PHP substr中文亂碼。
substr --- 取得部份字元串
語法 : string substr (string string, int start [, int length])
說明 :
substr( )傳回 string的一部份字元串,由參數 start和 length指定。
如果 start是正數扒搏差,傳回的字元串將會從 string的第 start個字元開始。
Example :
<?php
$rest = substr ("abcdef", 1); // returns "bcdef"
$rest = substr ("abcdef", 1, 3); // returns "bcd"
?>
如果 start是負數,傳回的字元串將會從 string結尾的第 start個字開始。
Example :
<?php
$rest = substr ("abcdef", -1); // returns "f"
$rest = substr ("abcdef", -2); // returns "ef"
$rest = substr ("abcdef", -3, 1); // returns "d"
?>
如果有給予參數 length而且是正數時,傳回的字元串將會從 start傳回 length個字元。
如果有給予參數 length而且是負數時,傳回的字元串將會結束於 string結尾的第 length個字元。
Example :
<?php
$rest = substr ("abcdef", 1, -1); // returns "bcde"
?>
對於英文沒有問題,我們測試一個中文
<?php
$rest = substr ("中國人", 1, -1); // returns "fdsafsda" 就是亂碼了
?>
這種截取字元的結果,肯定不是我們想要的結果,這種出現PHP substr中文亂碼的銀腔情況,可能會導致程序無法正常運行。解決辦法主要有兩種:
一、使用mbstring擴展庫的mb_substr()截取就不會出現亂碼了。
可以用mb_substr()/mb_strcut()這個函數,mb_substr()/mb_strcut()的用法與substr()相似,
只是在mb_substr()/mb_strcut最後要加入多一個參數,以設定字元串的編碼,但是一般的伺服器都沒打開
php_mbstring.dll,需要在php.ini在把php_mbstring.dll打開。
<?php
echo mb_substr("php中文字元encode",0,4,"utf-8");
?>
如果未指定最後一個編碼參數,會是三個位元組為一個中文,這就是utf-8編碼的特點,若加上utf-8字元集說明,所以,是以一個字為單位來截取的。
使用的時候要注意php文件的編碼,和網頁顯示時的編碼。使用這個mb_substr方法要事先知道字元串的編碼,如果不知道編碼,就需要判斷,mbstring庫還提供了mb_check_encoding來檢驗字元串編碼,但還不完善。
PHP 自帶幾種字元串截取函數,其中常用到的就是 substr 和 mb_substr。前者在處理中文時,GBK 為 2 個長度單位,UTF 為 3 個長度單位,後者指定編碼後,一個中文即為 1 個長度單位。
substr 有時會截 1/3 個中文或半個中文,會顯示亂碼,相對來說 mb_substr 更適合我們使用。不過有時候 mb_substr
就顯得不那麼好用了。例如我要顯示一個小圖片的簡要信息,5 個中文正好,超過 5 個就截取前4再加上
」…」,這樣處理中文是沒問題了,可是處理英文或數字,這樣截取就太短了。
二、自己書寫截取函數,但效率不如用mbstring擴展庫來得高。下面是ecshop裡面的截取UTF-8編碼下字元串的函數。
function sub_str($str, $length = , $append = true)
{
$str = trim($str);
$strlength = strlen($str);
if ($length == || $length >= $strlength)
{
return $str; //截取長度等於或大於等於本字元串的長度,返回字元串本身
}
elseif ($length < ) //如果截取長度為負數
{
$length = $strlength + $length;//那麼截取長度就等於字元串長度減去截取長度
if ($length < )
{
$length = $strlength;//如果截取長度的絕對值大於字元串本身長度,則截取長度取字元串本身的長度
}
}
if (function_exists('mb_substr'))
{
$newstr = mb_substr($str, , $length, EC_CHARSET);
}
elseif (function_exists('iconv_substr'))
{
$newstr = iconv_substr($str, , $length, EC_CHARSET);
}
else
{
//$newstr = trim_right(substr($str, , $length));
$newstr = substr($str, , $length);
}
if ($append && $str != $newstr)
{
$newstr .= '...';
}
return $newstr;
}
5. 如何用PHP做一個循環的倒計時牌
<?php
$StartDate = '06-07'; //開始日期
$OverDate = '06-08'; //結束日期
date_default_timezone_set('Etc/GMT-8'); //設置時區
$time = time();
$datetime = strtotime(date('Y-m-d', $time)); // 取得今天凌晨的時間
$year = date('Y', $time);
$OverTime = strtotime("$year-$OverDate"); // 取得結束的時間
if($OverTime < $datetime){ // 判斷有沒有過了結束日期 如 8 號,若過了,則開始明年的倒計時
$year++;
$OverTime = strtotime("$year-$OverDate");
}
$StartTime = strtotime("$year-$StartDate");
$n = $StartTime - $time; //計算相差的時間(秒)
if($n <= 0){ // 若是負數 則已經開始了
$n = abs($n) + 86400; // 若是要精確到 時 分 秒 則把這行去了
$str = "高考已經開始 第 %d 天"; //格式 輸出
} else {
$str = "距 $year 年高考還有: %d 天 %d 小時 %d 分 %d 秒";
}
//下面的 $day, $hour, $min, $sec 若是已經開始則表示開的已過的時間,否則則是相差的時間
$day = intval($n / 86400);
$hour = intval(($n % 86400) / 3600);
$min = intval(($n %3600) / 60);
$sec = $n % 60;
printf($str, $day, $hour, $min, $sec);
?>
6. php 分頁顯示出現產生錯誤的sql語句:select * from user limit -1,1
你那個sql語句中的限制條數 limit -1,1 這個是有問題的。不能為負數。主要是你判斷條件不對,造成那個$page老是為空,然後直接造成了$startcount為負數。應該採用empty($_GET),而不是isset($_GET).