<form id="jzrjp"></form>
      <address id="jzrjp"></address><noframes id="jzrjp">

      <sub id="jzrjp"><listing id="jzrjp"><menuitem id="jzrjp"></menuitem></listing></sub><sub id="jzrjp"><address id="jzrjp"><listing id="jzrjp"></listing></address></sub>

      ?php中for語句循環變量容易出現的差一錯誤一例

      發布時間:2014-10-09 23:34:39     來源:笑緣信息技術有限公司     閱讀:

      文章導讀

      相信大家在網站建設的過程中經常會用到for循環語句,有些細節可能決定我們程序的成敗、執行效率,甚至邏輯上沒任何問題的程序,執行結果卻
      相信大家在網站建設的過程中經常會用到for循環語句,有些細節可能決定我們程序的成敗、執行效率,甚至邏輯上沒任何問題的程序,執行結果卻不是我們想要的,并且怎么調試都找不出原因,合肥網絡公司權威笑緣信息技術有限公司就為大家介紹一例常見的差一錯誤。
      我們先來看一段程序;
      
               for ($i= 0; $i<=5; $i++){
      
                         continue;
      
               }
      
               echo $i;
      
      ?>

      請問,輸出的循環變量$i的值是多少?
      不少人可能會說:5,那就大錯特錯了。很多初次接觸php的程序員們可能對for循環語句的原理沒有弄明白,其實答案是6。你可以自己試驗一下。
       
      為什么是這個結果呢?合肥網站建設公司權威笑緣信息技術有限公司就來和大家詳細討論一下。
      我們知道,for循環語句需要提供三個參數,即for(初始值;循環條件;步長),每執行一次循環,循環變量都先累加相應步長值以后,再去和循環條件做比較,若符合循環條件,則繼續循環,若不符合循環條件,則不再進行下一輪循環,但是,循環變量的步長值實際上卻已經累加過了。
       
      你可能會說,你這是雞蛋里挑骨頭,沒事找事,誰會閑著沒事等循環結束了還會去調用循環變量呢?不好說,有時候真的會需要,合肥網站制作權威笑緣信息技術有限公司今天編寫了一個函數就用到了這一特性(可以說是差點被這個特性坑了),該函數用來在php中截取帶有中文字符串(php自帶的substr()函數在截取中文字符串的時候會出錯),因為筆者以前是做VB語言編程的,對這一塊吃過虧,所以貼出此方法避免大家遇到同樣的問題。下面貼出我寫的這個在php中截取帶有中文字符串的函數給大家做參考。

      1. php
      2. /**
      3.  * 從字符串指定位置截取指定個數字符(支持中文、英文、數字和混合字符串)
      4.  * $str 必需,要截取的字符串
      5.  * $start 可選,指定開始截取的位置,0表示第一個字符的位置,默認為0
      6.  * $cutlength 可選,指定截取多少個字符串,若為0,則從$start處開始截取到字符串結尾,默認為0.
      7.  * 注意:本函數中參數$start、$cutlength 以字符個數為計數單位,不以字節為計數單位。
      8.  * 作者:合肥笑緣信息技術有限公司
      9.  * 作者主頁:http://www.exaltemps.com
      10.  * 阿甘   QQ:2256101452
      11.  * 你可以隨意轉載、使用、修改這個函數,但請保留原作者版權信息,謝謝!
      12.  */
      13. function mid($str,$start=0,$cutlength=0){
      14.    $len=strlen($str); //記錄原始字符串總長度
      15.    $litcount=0;    //字符計數
      16.    $tmpi=0;        //記錄字節
      17.    for ($i=0; $i<$len; $i++){
      18.       ++$tmpi;
      19.       if(ord(substr($str,$i,1))>127){
      20.          ++$litcount;
      21.          $i+=2;
      22.          $tmpi+=2; //UTF-8的漢字字節碼是一個漢字3個字節(不是2個字節),如果判斷此處為漢字,直接跳到下一個字符的起始字節碼
      23.       }else{
      24.          ++$litcount;
      25.  
      26.       }
      27.       if ($litcount == $start || !$start){
      28.          break;
      29.       }
      30.    }
      31.    $cutcount=0; //計算字符字節
      32.    $litcount=0; //歸零
      33.    if (!$start) $tmpi=0;
      34.    for ($k=$tmpi; $k<$len; $k++){
      35.       ++$cutcount;
      36.       if(ord(substr($str,$k,1))>127){
      37.          ++$litcount;
      38.          $k+=2;
      39.          $cutcount+=2;
      40.       }else{
      41.          ++$litcount;
      42.       }
      43.       if ($litcount == $cutlength){
      44.          break;
      45.       }
      46.    }
      47.    return substr($str,$tmpi,$cutcount);
      48. }
      49. echo mid("我有1個小毛驢",0)."
        "
        ;    //輸出"我有1個小毛驢"
      50. echo mid("我有1個小毛驢",0,0)."
        "
        ;  //輸出"我有1個小毛驢"
      51. echo mid("我有1個小毛驢",0,1)."
        "
        ;  //輸出"我"
      52. echo mid("我有1個小毛驢",0,2)."
        "
        ;  //輸出"我有"
      53. echo mid("我有1個小毛驢",0,3)."
        "
        ;  //輸出"我有1"
      54. echo mid("我有1個小毛驢",0,4)."
        "
        ;  //輸出"我有1個"
      55. echo mid("我有1個小毛驢",0,5)."
        "
        ;  //輸出"我有1個小"
      56. echo mid("我有1個小毛驢",0,6)."
        "
        ;  //輸出"我有1個小毛"
      57. echo mid("我有1個小毛驢",0,7)."
        "
        ;  //輸出"我有1個小毛驢"
      58. ?>

      文章來源:合肥笑緣信息技術有限公司http://www.exaltemps.com,轉載請注明出處并保留鏈接。
      • 電話咨詢

      • 400-670-1990
      • 18805695870
      一区二区三区鲁丝不卡

        <form id="jzrjp"></form>
          <address id="jzrjp"></address><noframes id="jzrjp">

          <sub id="jzrjp"><listing id="jzrjp"><menuitem id="jzrjp"></menuitem></listing></sub><sub id="jzrjp"><address id="jzrjp"><listing id="jzrjp"></listing></address></sub>