zoukankan      html  css  js  c++  java
  • php面试题

    【总结】PHP常见面试题汇总(一)。。。

    1. /** 
    2.  * 第1题:用PHP打印出上周的时间格式,如:"2015-01-22 14:42:09" 
    3.  */  
    4.   
    5. echo date("Y-m-d H:i:s",strtotime("-1 day"))."<br/>"; 
    1. /** 
    2.  * 第2题:用PHP打印出上周的时间格式,如:"2015-01-15 14:42:09" 
    3.  */  
    4.   
    5. echo date("Y-m-d H:i:s",strtotime("-1 week"))."<br/>";   
    1. /** 
    2.  * 第3题:用PHP打印出上个月的时间格式,如:"2014-12-22 14:42:09" 
    3.  */  
    4.   
    5. echo date("Y-m-d H:i:s",strtotime("-1 month"))."<br/>";  
    1. /** 
    2.  * 第4题:简述一下echo、print、print_r 区别 
    3.  * print_r()主要用来输出数组的结构;echo 和 print 主要用来输出字符串,只不过echo 可同时输出多个字符串,print 只能输出一个字符串; 
    4.  * echo 和 print 区别: 
    5.         (1)使用命令方式来输出字符串,此时不需要小括号;看个人习惯,个人习惯使用命令方式来输出字符串 
    6.         (2)使用函数方式来输出字符串,echo无返回值,print有返回值,成功返回 1,失败返回 0 
    7.  */  
    8.   
    9. print_r(array("hello world"))."<br/>";  
    10.   
    11. echo (print "ddd")."<br/>";  
    1. /** 
    2.  * 第5题:如何实现字符串反转,如:"abcdefg" 反转成 "gfedcba";两种方式:(1)调用php自带的strrev()函数 (2)自定义函数 strrevv 
    3.  */  
    4.   
    5. echo strrev("abcdefg")."<br/>";  
    6.   
    7. $str = "abcdefg";  
    8. function strrevv($str){  
    9.     $len=strlen($str);  
    10.     $newstr = '';  
    11.     for($i=$len-1;$i>=0;$i--){  
    12.         $newstr .= $str{$i};  
    13.     }  
    14.     return $newstr;  
    15. }  
    16. $showstr = strrevv($str);  
    17. echo $showstr."<br>";  
    18.   
    19. //array_reverse():将原数组中的元素顺序反转,创建新的数组并返回;如果第二个参数指定为true,则元素的键名保持不变,如下:  
    20. $a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");  
    21. print_r(array_reverse($a));  
    22. //输出结果:  
    23. Array ( [c] => Horse [b] => Cat [a] => Dog )  
    1. ** 
    2.  * 第6题:如何实现中文字符串截取无乱码的方法(mb_*系列函数),首先:需要开启 extension=php_mbstring.dll 扩展 ,结果:"你" 
    3.  */  
    4.   
    5. echo mb_substr("你好",0,1,"gb2312")."<br/>";  
    1.  * 第7题:用PHP写出显示客户端和服务器端IP的代码 
    2.  */  
    3.   
    4. echo $_SERVER['REMOTE_ADDR'];//客户端IP  
    5. echo $_SERVER['SERVER_ADDR'];//服务器端IP  
    6. echo $_SERVER['PHP_SELF'];//结果:"/index.php"   当前脚本的名称(不包括路径和查询字符串)  
    7. echo $_SERVER["HTTP_REFERER"];//链接到当前页面的来源url  
    8. echo gethostbyname("www.v1pin.com");//获取指定域名的IP地址  
    9. echo getenv("REMOTE_ADDR");//获取客户端IP地址  
    10. echo getenv("SERVER_ADDR");//获取服务器端IP地址   
    1. /** 
    2.  * 第8题:mysql中 IFNULL 控制流函数;IFNULL() 
    3.  * IFNULL(): 
    4.  *      (1)它有两个参数,并且对第一个参数进行判断。 
    5.  *      (2)如果第一个参数不是NULL,函数就会向调用者返回第一个参数;如果是NULL,将返回第二个参数; 
    6.  * 例如: 
    7.  *      SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(4*NULL,'false');//结果:"1 10  false" 
    8.  */  
    1. /** 
    2.  * 第9题:简述include与require的区别? 
    3.  * 相同点: 
    4.  *      (1)include与require都能把另外一个文件包含到当前文件中 
    5.  * 异同点: 
    6.  *      (1)使用include时,当包含的文件不存在时系统会报出警告级别的错误,但并不影响程序的后续执行. 
    7.  *      (2)使用require时,当包含的文件不存在时系统会先报出警告级别的错误,接着又报出一个致命性的错误,将终止程序的后续执行. 
    8.  *      (3)require只会解释包含的文件一次,不会再解释第二次,因而效率相对较高;而include则会重复的解释包含的文件 
    9.  *      (4)载入时机不同:require在运行前载入包含文件,include在运行时载入包含文件 
    10.  */  
    1. /** 
    2.  * 第10题:如何获取一个字符串中指定的字符? 
    3.  */  
    4.   
    5.  $str="abcdefg";  
    6.  echo $str{2}."<br/>";  
    7. /** 
    1.  * 第11题:如何批量替换字符串中的特定字符?如:"批量替换$content内容字符串中的所有双引号为单引号" 
    2.  */  
    3.   
    4. $content = str_replace($searchs=array("""), $replaces=array("'"), $content);  
    1. /** 
    2.  * 第12题:如何将UEditor或FCkeditor编辑器中的内容转化为JSON串? 
    3.  * 
    4.  *  (1)第一种情况,内容中只有双引号的情况: 
    5.  *      $content='<img alt="" src="../image/20121025/20121025105514_1093.jpg" />'; 
    6.  *      // {"content":"<img alt="" src="../image/20121025/20121025105514_1093.jpg" />"} 
    7.  *      echo json_encode(array("content"=>$content)); 
    8.  *  (2)第二种情况,内容中只有单引号的情况: 
    9.  *      $content="<img alt='' src='../image/20121025/20121025105514_1093.jpg' />"; 
    10.  *      // {"content":"<img alt='' src='../image/20121025/20121025105514_1093.jpg' />"} 
    11.  *      echo json_encode(array("content"=>$content)); 
    12.  *  (3)第三种情况,内容中既有双引号,又有单引号的情况: 
    13.  *      $content=htmlspecialchars($content);//把一些预定义的字符转换为HTML实体 
    14.  *      $json_arr = json_encode(array("content"=>$content));//将数组json化为字符串 
    15.  *      $arr = json_decode($json_arr,true);//将json串反json化为数组 
    16.  *      $arr['content']=htmlspecialchars_decode($arr['content']);//把一些预定义的HTML实体转换为字符显示到网页中 
    17.  *       
    18.  */  
    1. /** 
    2.  * 第13题:addslashes()与 htmlspecialchars() 区别 
    3.  * 
    4.  * 区别: 
    5.  
    6.  *   (1)addslashes()函数主要在指定的预定义字符前添加反斜杠,这些预定义字符主要包括: 
    7.  * 
    8.  *      单引号 (') 
    9.  *      双引号 (") 
    10.  *      反斜杠 () 
    11.  *      NULL 
    12.  * 
    13.  *      addslashes()函数的主要作用是保证这些预定义字符能够正确入库,仅此而已 
    14.  * (2)htmlspecialchars()函数把一些预定义的字符转换为HTML实体,这些预定义字符主要包括:       
    15.  *      & (和号)      成为 &amp; 
    16.  *      " (双引号)     成为 &quot; 
    17.  *      ' (单引号)     成为 &#039; 
    18.  *      < (小于)       成为 &lt; 
    19.  *      > (大于)       成为 &gt;  
    20.  *      echo htmlspecialchars($str, ENT_COMPAT);  //默认,仅编码双引号 
    21.  *      echo htmlspecialchars($str, ENT_QUOTES);  //编码双引号和单引号 
    22.  *      echo htmlspecialchars($str, ENT_NOQUOTES);//不编码任何引号 
    23.  * /** 
    1.  * 第14题:如何去除数组中重复的值?使用数组函数 array_unique() 可以做到 
    2.  * 案例结果: 
    3.  *     Array( 
    4.  *          [0] => 8535455928182811 
    5.  *          [1] => 1558999140182811 
    6.  *          [3] => 5795844841182811 
    7.  *     ) 
    8.  */  
    9.   
    10.  $arr=array(  
    11.       "8535455928182811",  
    12.       "1558999140182811",  
    13.       "1558999140182811",  
    14.       "5795844841182811",  
    15.       "5795844841182811",  
    16.  );  
    17.   
    18.  $ordersn_arr=array_unique($arr);  
    19.  echo "<pre>";print_r($ordersn_arr);exit;  
    1. /* 
    2. * 第15题:说一说自己对$GLOBALS全局变量和global关键字的理解?   
    3. * (1)、输出$GLOBALS全局变量: 
    4. *  
    5. *    echo "<pre>";print_r($GLOBALS); 
    6. *  
    7. *    结果: 
    8. *    Array 
    9. *       ( 
    10. *           [GLOBALS] => Array 
    11. *              *RECURSION* 
    12. *           [_POST] => Array 
    13. *               ( 
    14. *                  [username] => admin     //等价于$_POST['username'] 
    15. *                  [password] => 123       //等价于$_POST['password'] 
    16. *               ) 
    17. *           [_GET] => Array 
    18. *               ( 
    19. *                  [username] => admin     //等价于$_GET['username'] 
    20. *                  [password] => 123       //等价于$_GET['password'] 
    21. *               ) 
    22. *           [_COOKIE] => Array 
    23. *               ( 
    24. *                   [PHPSESSID] => movgbv4t1klb9fsbcd7ns8ik73 
    25. *                   [username] => admin     //等价于$_COOKIE['username'] 
    26. *                   [password] => 123       //等价于$_COOKIE['password'] 
    27. *               ) 
    28. *           [_FILES] => Array 
    29. *               ( 
    30. *                  [name] => 1.txt         //等价于$_FILES['username'] 
    31. *                  [type] => image/jpeg    //等价于$_FILES['password'] 
    32. *               ) 
    33. *           [_SESSION] => Array 
    34. *               ( 
    35. *                  [username] => admin     //等价于$_SESSION['username'] 
    36. *                  [password] => 123       //等价于$_SESSION['password'] 
    37. *               ) 
    38. *           [pwd] => 134121233             //等价于$pwd 
    39. *           [username] => xiaoqiang        //等价于$username 
    40. *           [password] => 123              //等价于$password 
    41. *       ) 
    42. *  
    43. * (2)、几种等价的写法: 
    44. *   
    45. *    (1)$_SESSION['username']等价于$GLOBALS['_SESSION']['username'] 
    46. *    (2)$_COOKIE['username']等价于$GLOBALS['_COOKIE']['username'] 
    47. *    (3)$_GET['username']等价于$GLOBALS['_GET']['username'] 
    48. *    (4)$_POST['username']等价于$GLOBALS['_POST']['username'] 
    49. *    (5)$_FILES['username']等价于$GLOBALS['_FILES']['username'] 
    50. *    (6)$username等价于$GLOBALS['username'] 
    51. *  
    52. * (3)、global关键字: 
    53. *  
    54. *    php中全局变量在函数体内使用时必须声明为global;在函数体内通过global关键字声明的变量自动变为函数体外的全局变量 
    55. *    案例1: 
    56. *    function test(){ 
    57. *       global $username;//声明全局变量时不能赋值 
    58. *       $username="小强";//此时可以给全局变量赋值 
    59. *    } 
    60. *    test(); 
    61. *    echo "<pre>";print_r($GLOBALS);exit;//结果:"小强" 
    62. *    案例2: 
    63. *    $username="小强"; 
    64. *    function test(){ 
    65. *       global $username;//声明全局变量时不能赋值(提示:使用global关键字引用函数体外的$username变量) 
    66. *       $username="小红";//此时可以给全局变量赋值(提示:将函数体外$username变量重新赋值) 
    67. *    } 
    68. *    test(); 
    69. *    echo "<pre>";print_r($GLOBALS);exit;//结果:"小红" 
    70. *  
    71. * (4)、全局变量的生效范围: 
    72. *  
    73. *    $a = 1;include 'b.inc';//这里变量$a将会在包含文件b.inc中生效 
    74. *  
    75. * (5)、global声明的变量为全局变量,在函数和类的外部照样可以使用 
    76. *  
    77. *    如:discuz_application.php类中使用global关键字声明的$_G全局变量,在全站都可以使用 
    78. */  
    [php] view plain copy
     
    1. /** 
    2.  * 第16题:回调函数 call_user_func() 如何使用? 
    3.  * 格式一: 
    4.  *    call_user_func("自定义函数","传递给自定义函数的参数1","传递给自定义函数的参数2","传递给自定义函数的参数3","传递给自定义函数的参数N....");//返回结果为自定义函数的返回结果 
    5.  * 格式二: 
    6.  *    call_user_func(array("类名","方法名"),"传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N....");//返回结果为类中方法的返回结果 
    7.  * 格式三: 
    8.  *    call_user_func_array("自定义函数",array("传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N...."));//传递给函数的参数统一放到数组中 
    9.  * 格式四: 
    10.  *    call_user_func_array(array("类名","方法名"),array("传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N...."));//传递给方法的参数统一放到数组中 
    11.  */  
    12. function uc_feed_add($icon, $uid, $username, $title_template='', $title_data='', $body_template='', $body_data='', $body_general='', $target_ids='', $images = array()) {  
    13.          //UC_API_FUNC值为:'uc_api_mysql'或'uc_api_post';  
    14.          //调用自定义函数'uc_api_mysql'或'uc_api_post'  
    15.          //返回结果为自定义函数的返回结果  
    16.          return call_user_func(UC_API_FUNC, 'feed', 'add',  
    17.                  array(  'icon'=>$icon,  
    18.                          'appid'=>UC_APPID,  
    19.                          'uid'=>$uid,//用户ID  
    20.                          'username'=>$username,  
    21.                          'title_template'=>$title_template,  
    22.                          'title_data'=>$title_data,  
    23.                          'body_template'=>$body_template,  
    24.                          'body_data'=>$body_data,  
    25.                          'body_general'=>$body_general,  
    26.                          'target_ids'=>$target_ids,  
    27.                          'image_1'=>$images[0]['url'],  
    28.                          'image_1_link'=>$images[0]['link'],  
    29.                          'image_2'=>$images[1]['url'],  
    30.                          'image_2_link'=>$images[1]['link'],  
    31.                          'image_3'=>$images[2]['url'],  
    32.                          'image_3_link'=>$images[2]['link'],  
    33.                          'image_4'=>$images[3]['url'],  
    34.                          'image_4_link'=>$images[3]['link']  
    35.                  )  
    36.          );  
    37.  }  
    [php] view plain copy
     
    1. //第17题:如何使用 array_multisort() 函数实现对多维数组进行排序?  
    2. //模拟从数据库中查询出来的记录(提示:二维数组)  
    3. $arr[] = array("age"=>20,"name"=>"小强");  
    4. $arr[] = array("age"=>21,"name"=>"李伟");  
    5. $arr[] = array("age"=>20,"name"=>"小亮");  
    6. $arr[] = array("age"=>22,"name"=>"黎明");  
    7.    
    8. foreach ($arr as $key=>$value){  
    9.     $age[$key]  = $value['age']; //排序字段 "age"  
    10.     $name[$key] = $value['name'];//排序字段 "name"  
    11. }  
    12.   
    13. /** 
    14.  * 1、对 $arr 数组进行排序 
    15.  *    首先按照年龄从大到小的顺序排列,如果年龄相同再按照名字的顺序排序,类似于sql中的order by 
    16.  * 2、注意事项: 
    17.  *    (1)$age和$name  等价于 数据表的"age"和"name"列字段,类似于 "order by age desc,name asc"  
    18.  *    (2)排序顺序标志: 
    19.  *          SORT_ASC - 按照上升顺序排序 
    20.  *          SORT_DESC - 按照下降顺序排序 
    21.  *    (3)排序类型标志: 
    22.  *          SORT_REGULAR - 将项目按照通常方法比较 
    23.  *          SORT_NUMERIC - 将项目按照数值比较 
    24.  *          SORT_STRING  - 将项目按照字符串比较 
    25.  *    (4)排序标志的默认值为: SORT_ASC 和 SORT_REGULAR 
    26.  *    (5)每个一维数组后指定的排序标志仅仅对该一维数组有效,一个一维数组不能指定两个同类的排序标志 
    27.  *    (6)该函数会改变数字索引,其它索引不改变 
    28.  * 
    29.  */  
    30. array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$arr);  
    31. echo "<pre>";print_r($arr);exit;  
    32. /** 
    33.  * 结果: 等价于 "select * from user order by age desc,name asc"; 
    34.  * Array( 
    35.  *   [0] => Array 
    36.  *       ( 
    37.  *           [age] => 22 
    38.  *           [name] => 黎明 
    39.  *       ) 
    40.  *   [1] => Array 
    41.  *       ( 
    42.  *           [age] => 21 
    43.  *           [name] => 李伟 
    44.  *       ) 
    45.  *   [2] => Array 
    46.  *       ( 
    47.  *           [age] => 20 
    48.  *           [name] => 小亮 
    49.  *       ) 
    50.  *   [3] => Array 
    51.  *       ( 
    52.  *           [age] => 20 
    53.  *           [name] => 小强 
    54.  *       ) 
    55.  * ) 
    56.  */  
    [php] view plain copy
     
    1. //第18题:移除数组中元素中的几种方式?  
    2. //案例一:  
    3. $arr1 = array('1','2','3','4');  
    4. //提示:虽然删除了元素,但是没有重建数组索引  
    5. unset($arr1[2]);  
    6. echo "<pre>";print_r($arr1);  
    7. /** 
    8.  *  使用unset()函数处理后的结果: 
    9.  *  Array( 
    10.  *      [0] => 1 
    11.  *      [1] => 2 
    12.  *      [3] => 4 
    13.  *  ) 
    14.  */  
    15.   
    16. //案例二:  
    17. $arr2 = array('1','2','3','4');  
    18. //提示:删除了元素,并且重建了数组索引  
    19. array_splice($arr2, 2, 1);//参数2-开始位置 参数3-删除元素数量  
    20. echo "<pre>";print_r($arr2);  
    21. /** 
    22.  *  使用array_splice()函数处理后的结果: 
    23.  *  Array( 
    24.  *      [0] => 1 
    25.  *      [1] => 2 
    26.  *      [2] => 4 
    27.  *  ) 
    28.  */  
    29.   
    30. //案例三:  
    31. $arr3 = array('1','2','3','4');  
    32. //提示:删除了元素,被移除的元素由参数4来替代  
    33. array_splice($arr3, 2, 1,array("5"));//参数1-原数组 参数2-开始位置 参数3-删除元素数量 参数4-替换被移除元素的数组  
    34. echo "<pre>";print_r($arr3);  
    35. /** 
    36.  *  使用array_splice()函数处理后的结果: 
    37.  *  Array( 
    38.  *      [0] => 1 
    39.  *      [1] => 2 
    40.  *      [2] => 5 
    41.  *      [3] => 4 
    42.  *  ) 
    43.  */  
    44.   
    45. //案例四:  
    46. $arr4 = array('1','2','3','4');  
    47. //提示:从数组中截取一段元素并返回(返回的数组索引被重建)  
    48. $arr5 = array_slice($arr4, 2, 1);//参数2-开始位置 参数3-删除元素数量  
    49. echo "<pre>";print_r($arr5);  
    50. /** 
    51.  *  使用array_slice()函数处理后的结果: 
    52.  *  Array( 
    53.  *      [0] => 3 
    54.  *  ) 
    55.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第19题:如何对数组元素进行递归转义? 
    3.  * 对字符串或者输入进行 addslashes 操作 
    4.  * @param <mix> $string 要进行转义的数组或字符串 
    5.  * @param <int> $force  强制转义的意思 
    6.  * @return <mix> 
    7.  */  
    8. function daddslashes($string, $force = 1) {  
    9.     if(is_array($string)) {//是否对数组中各元素进行转义操作  
    10.         $keys = array_keys($string);//数组中的键  
    11.         foreach($keys as $key) {//循环数组中的键  
    12.             $val = $string[$key];//获取数组中键所对应的元素值  
    13.             unset($string[$key]);//删除元素  
    14.                         //给元素重新赋值(键名和键值都进行了转义:主要用于入库操作)  
    15.             $string[addslashes($key)] = daddslashes($val, $force);//递归调用  
    16.         }  
    17.     } else {  
    18.         $string = addslashes($string);//对字符串进行转义  
    19.     }  
    20.     return $string;//返回转义好的数组或字符串  
    21. }  
    [php] view plain copy
     
    1. /**  
    2.  * 第20题:如何获取文件扩展名? 
    3.  * 获取文件扩展名  
    4.  * @param $filename 文件名 
    5.  */  
    6. function fileext($filename) {  
    7.         //strrchr():查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符  
    8.         //strrchr("aaaaaaaa.jpg",".");//结果:".jpg"  
    9.         //substr(strrchr($filename, '.'), 1, 10);//结果:"jpg"  
    10.     return addslashes(strtolower(substr(strrchr($filename, '.'), 1, 10)));  
    11. }  
    [php] view plain copy
     
    1. /**  
    2.  * 第21题:如何查找一个字符串中是否有数组中让你和一个元素,如何有返回该元素字符串在字符串中的位置? 
    3.  * 字符串方式实现 preg_match("/(s1|s2|s3)/", $string, $match)  
    4.  * @param string $string 源字符串  
    5.  * @param array $arr 要查找的字符串 如array('s1', 's2', 's3')  
    6.  * @param bool $returnvalue 是否返回找到的值  
    7.  * @return bool  
    8.  */  
    9. function dstrpos($string, $arr, $returnvalue = false) {  
    10.     if(empty($string)) return false;  
    11.     foreach((array)$arr as $v) {  
    12.                 //strpos() 函数返回字符串在另一个字符串中第一次出现的位置.如果没有找到该字符串,则返回 false;对大小写敏感  
    13.                 //stripos()函数返回字符串在另一个字符串中第一次出现的位置.如果没有找到该字符串,则返回 false;对大小写不敏感  
    14.         if(strpos($string, $v) !== false) {  
    15.             $return = $returnvalue ? $v : true;  
    16.             return $return;  
    17.         }  
    18.     }  
    19.     return false;  
    20. }  
    [php] view plain copy
     
    1. /** 
    2.  * 第22题:PHP常用的回调函数有哪些? 
    3.  * PHP还有一些常用的回调函数,如下: 
    4.  * 将数组元素以某种分隔符拼接成一个字符串(此函数拼接的字符串是带单引号的),如:'强哥','123456'格式(带单引号) 
    5.  * $array = array_map('addslashes', $array):返回经过addslashes()回调函数处理过的$array,回调函数可以自定义并且必须有返回值;返回用户自定义函数作用后的数组 
    6.  * $flag = array_walk($array,'addslashes'):返回经过addslashes()回调函数处理过的$array,只不过参数顺序跟array_map()不同,回调函数可以自定义并且没有返回值;对数组中每个元素使用回调函数,返回bool值 
    7.  * array_filter():此函数是专门用于过去数组中的元素,简单点说就是对数组中的经过回调函数判断的value进行过滤(一般为自定义回调函数,如:奇数或偶数的过滤等),并通过array_filter()函数返回处理后的数组 
    8.  *  function myfunction($v){ 
    9.  *      if ($v==="Horse"){ 
    10.  *          return true;//如何返回true,则将其纳入符合条件的数组元素并返回,不会重建索引 
    11.  *      } 
    12.  *      return false; 
    13.  *  } 
    14.  *  $a=array(0=>"Dog",1=>"Cat",2=>"Horse"); 
    15.  *  print_r(array_filter($a,"myfunction")); 
    16.  * 
    17.  * 结果: 
    18.  * 
    19.  * Array ( [2] => Horse ) 
    20.  * 
    21.  * @param type $array 
    22.  * @return int 
    23.  */  
    24. function dimplode($array) {  
    25.     if(!empty($array)) {  
    26.                 //array_map():返回经过addslashes()回调函数处理过的$array,回调函数可以自定义并且必须有返回值;回调函数对原数组处理后返回一个新的数组;返回用户自定义函数作用后的数组  
    27.                 //array_walk():也是返回经过addslashes()回调函数处理过的$array,只不过参数顺序不同,回调函数可以自定义并且无返回值;回调函数直接对原数组处理,并且不会返回一个新数组;处理成功后返回布尔值true,反之返回布尔值false;对数组中每个元素使用回调函数,返回bool值  
    28.         $array = array_map('addslashes', $array);//$array等价于 $flag = array_walk($arr,'addslashes');中的$arr数组  
    29.                 //返回拼接好的字符串,如:'hello world','123456'格式(带单引号)  
    30.         return "'".implode("','", is_array($array) ? $array : array($array))."'";//拼接sql语句  
    31.     } else {  
    32.         return 0;  
    33.     }  
    34. }  
    35.   
    36. 再如:  
    37. $brand_id_arr = array_unique(array_map(function ($val) { return $val['id']; }, $brand_list));//被回调的函数是一个匿名函数  
    [php] view plain copy
     
    1. /** 
    2.  * 第23题:递归反转义 
    3.  * stripslashes()函数的使用场合:主要针对的是get_magic_quotes_gpc()=on的情况,这时候我们应该这样来处理,如: 
    4.  * <?php 
    5.  *      //说明: 用 stripslashes 还原 addslashes 转义后的数据 
    6.  *       if(get_magic_quotes_gpc()){ 
    7.  *           function stripslashes_deep($value){//递归函数 
    8.  *               //array_map('stripslashes_deep', $_POST);//对$_POST数组中的各元素使用stripslashes_deep()来进行处理 
    9.  *               $value = is_array($value) ? array_map('stripslashes_deep', $value) : (isset($value) ? stripslashes($value) : null); 
    10.  *               return $value; 
    11.  *           } 
    12.  *           $_POST = stripslashes_deep($_POST);//对POST数据中的特殊字符进行反转义 
    13.  *           $_GET = stripslashes_deep($_GET);  //对GET数据中的特殊字符进行反转义 
    14.  *           $_COOKIE = stripslashes_deep($_COOKIE);//对COOKIE数据中的特殊字符进行反转义 
    15.  *       } 
    16.  * ?> 
    17.  */  
    18. function dstripslashes($string) {  
    19.     if(empty($string)) return $string;  
    20.     if(is_array($string)) {  
    21.         foreach($string as $key => $val) {  
    22.             $string[$key] = dstripslashes($val);  
    23.         }  
    24.     } else {  
    25.         $string = stripslashes($string);  
    26.     }  
    27.     return $string;  
    28. }  
    [php] view plain copy
     
    1. /** 
    2.  * 第24题:PHP中常用的编码函数汇总 
    3.  * 1、论坛 aid url 生成, 
    4.  *    用于生成附件下载的aid,如:"forum.php?mod=attachment&aid=MzZ8OTExOGY1Njl8MTQwOTYzODgxOXwxfDM0" 
    5.  *    $aid     附件id 
    6.  *    $type    附件类型 
    7.  *    $tid     tableid 
    8.  * 2、在forum_attachmentphp文件中可获取aid参数的值并分析: 
    9.  *    list($_GET['aid'], $_GET['k'], $_GET['t'], $_GET['uid'], $_GET['tableid']) = daddslashes(explode('|', base64_decode($_GET['aid']))); 
    10.  * 3、两种编码方式的异同 
    11.  *    echo urlencode("中文-_. ")."<br/>"; //%D6%D0%CE%C4-_.+ 
    12.  *    echo urldecode("%D6%D0%CE%C4-_. ")."<br/>"; //中文-_. 
    13.  *    echo rawurlencode("中文-_. ")."<br/>"; //%D6%D0%CE%C4-_.%20 
    14.  *    echo rawurldecode("%D6%D0%CE%C4-_. ")."<br/>"; //中文-_. 
    15.  *    echo base64_encode("中文-_. ")."<br/>"; //1tDOxC1fLiA= 
    16.  *    echo base64_decode("1tDOxC1fLiA=")."<br/>"; //中文-_. 
    17.  *    总结: 
    18.  *    (1)urlencode和rawurlencode除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数 
    19.  *    (2)urlencode和rawurlencode的区别在于urlencode 将空格则编码为加号(+),rawurlencode 将空格则编码为加号(%20) 
    20.  *    (3)base64_encode编码:格式是大小写字母、数字、“=”号、“+”号和“/”号,但“=”等号最多只有两个,所以看到有大小写字母的字符串并且有一个或两个等号结束的,基本可以判断是base64编码 
    21.  *       base64不适合直接放在URL里传输,发现base64编码中有“/” “=”符号。为解决此问题,可采用一种用于URL的改进Base64编码(如:str_replace()),它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了 “_”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换 
    22.  *  
    23.  *    urldecode()和rawurldecode()解码出的字符串是utf-8格式的编码,如果url中含有中文的话,而页面设置又不是 utf-8 的话,则要把解码出的字符串进行转换,才能正常显示! 
    24.  *    echo rawurlencode("我们都是中国人")."<br/>";//结果:utf-8编码:%E6%88%91%E4%BB%AC%E9%83%BD%E6%98%AF%E4%B8%AD%E5%9B%BD%E4%BA%BA  gbk编码结果:%CE%D2%C3%C7%B6%BC%CA%C7%D6%D0%B9%FA%C8%CB 
    25.  *    echo rawurldecode("%E6%88%91%E4%BB%AC%E9%83%BD%E6%98%AF%E4%B8%AD%E5%9B%BD%E4%BA%BA")."<br/>";//结果:我们都是中国人 
    26.  *    REQUEST方式传递中文数据的情况:$aid=rawurlencode("我们都是中国人");$aid=rawurldecode($_REQUEST['aid']);//中文需要解码 
    27.  *    REQUEST方式传递非中文数据的情况:$aid=rawurlencode("admin");$aid=$_REQUEST['aid'];//非中文不需要解码 
    28.  */  
    29. function aidencode($aid, $type = 0, $tid = 0) {  
    30.     global $_G;  
    31.         //$_G['config']['security']['authkey']值:$_config['security']['authkey'] = 'f1cb54uAKR3aYCqk';  
    32.     $s = !$type ? $aid.'|'.substr(md5($aid.md5($_G['config']['security']['authkey']).TIMESTAMP.$_G['uid']), 0, 8).'|'.TIMESTAMP.'|'.$_G['uid'].'|'.$tid : $aid.'|'.md5($aid.md5($_G['config']['security']['authkey']).TIMESTAMP).'|'.TIMESTAMP;  
    33.         //urldecode()和rawurldecode()解码出的字符串是utf-8格式的编码,如果url中含有中文的话,而页面设置又不是 utf-8 的话,则要把解码出的字符串进行转换,才能正常显示!  
    34.         //echo rawurlencode("我们都是中国人")."<br/>";//结果:utf-8编码:%E6%88%91%E4%BB%AC%E9%83%BD%E6%98%AF%E4%B8%AD%E5%9B%BD%E4%BA%BA  gbk编码结果:%CE%D2%C3%C7%B6%BC%CA%C7%D6%D0%B9%FA%C8%CB  
    35.         //echo rawurldecode("%E6%88%91%E4%BB%AC%E9%83%BD%E6%98%AF%E4%B8%AD%E5%9B%BD%E4%BA%BA")."<br/>";//结果:我们都是中国人  
    36.         //REQUEST方式传递中文数据的情况:$aid=rawurlencode("我们都是中国人");$aid=rawurldecode($_REQUEST['aid']);//中文需要解码  
    37.         //REQUEST方式传递非中文数据的情况:$aid=rawurlencode("admin");$aid=$_REQUEST['aid'];//非中文不需要解码  
    38.     return rawurlencode(base64_encode($s));//最佳组合编码方式  
    39. }  
    [php] view plain copy
     
    1. /** 
    2.  * 第25题:附件分表规则 
    3.  */  
    4. /**  
    5.  * 通过 AID 获取附件表名  
    6.  * @param <int> $aid  
    7.  */  
    8. function getattachtablebyaid($aid) {  
    9.     $attach = C::t('forum_attachment')->fetch($aid);  
    10.     $tableid = $attach['tableid'];  
    11.     return 'forum_attachment_'.($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused');  
    12. }  
    13.   
    14. /**  
    15.  * 返回指定 tid 所对应的附件表编号 
    16.  * 假设$tid=69,那么 $tid{strlen($tid)-1} 等价于 $tid{1} 等价于 9 ,所以tid为69的主题对应的附件表是pre_forum_attachment_9 
    17.  * @param <int> $tid  
    18.  */  
    19. function getattachtableid($tid) {  
    20.     $tid = (string)$tid;  
    21.         //假设$tid=69,那么 $tid{strlen($tid)-1} 等价于 $tid{1} 等价于 9  
    22.         //所以tid为69的主题对应的附件表是pre_forum_attachment_9  
    23.         //返回值为0-9,所以附件表也只能是0-9,即:pre_forum_attachment_0 到 pre_forum_attachment_9  
    24.     return intval($tid{strlen($tid)-1});  
    25. }  
    26.   
    27. /**  
    28.  * 通过 tid 获取附件表名  
    29.  * @param <int> $tid  
    30.  */  
    31. function getattachtablebytid($tid) {  
    32.     return 'forum_attachment_'.getattachtableid($tid);  
    33. }  
    34.   
    35. /**  
    36.  * 通过 pid 获取附件表名,如:"pre_forum_attachment_0"、"pre_forum_attachment_1"、"pre_forum_attachment_2"、"pre_forum_attachment_unused" 
    37.  * @param <int> $pid  
    38.  */  
    39. function getattachtablebypid($pid) {  
    40.     $tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE pid='$pid' LIMIT 1");  
    41.     return 'forum_attachment_'.($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused');  
    42. }  
    43.   
    44. /**  
    45.  * 添加一个新的附件索引记录,并返回新附件 ID  
    46.  * @param <int> $uid  
    47.  */  
    48. function getattachnewaid($uid = 0) {  
    49.     global $_G;  
    50.     $uid = !$uid ? $_G['uid'] : $uid;  
    51.     return C::t('forum_attachment')->insert(array('tid' => 0, 'pid' => 0, 'uid' => $uid, 'tableid' => 127), true);  
    52. }  

    [php] view plain copy
     
    1. /** 
    2.  * 第26题:递归循环某目录下的子目录及文件并输出 
    3.  */  
    4. function tree($dir,$level=1){    
    5.     
    6.     $fh=opendir($dir);//打开目录    
    7.     
    8.     while($dirname=readdir($fh)){//循环读取当前目录下的子目录及文件    
    9.         if($dirname == '.' || $dirname == '..'){  
    10.             continue;    
    11.         }    
    12.     
    13.         echo "|".str_repeat('-',$level).$dirname;//目录名或文件名,str_repeat("|-",$num);//把字符串重复指定的次数    
    14.         echo '<br>';    
    15.         if(is_dir($dir. '/' .$dirname)){//如果是目录,则递归调用    
    16.     
    17.             tree($dir. '/' .$dirname,$level+2);    
    18.         }    
    19.     }    
    20. }    
    21.     
    22. tree('D:/wamp/www/discuz3/source/');   


    [php] view plain copy
     
    1. /** 
    2.  * 第27题:交换数组中的键和值 
    3.  */  
    4. $a=array(  
    5.     0=>"Dog",  
    6.     1=>"Cat",  
    7.     2=>"Horse"  
    8. );  
    9. echo "<pre>";  
    10. print_r(array_flip($a));  
    11.   
    12. /** 
    13.  * 经array_flip()数组函数处理后的结果: 
    14.  * Array( 
    15.  *   [Dog] => 0 
    16.  *   [Cat] => 1 
    17.  *   [Horse] => 2 
    18.  *  ) 
    19.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第28题:删除数组中最后一个元素 
    3.  */  
    4. $a=array("Dog","Cat","Horse");  
    5. array_pop($a);  
    6. echo "<pre>";print_r($a);  
    7.   
    8. /** 
    9.  * 经array_pop()数组函数处理后的结果: 
    10.  * Array( 
    11.  *   [0] => Dog 
    12.  *   [1] => Cat 
    13.  *  ) 
    14.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第29题:array_push()函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度 
    3.  */  
    4. $a=array("Dog","Cat");  
    5. $b=array("Horse","Bird");  
    6. $num=array_push($a,$b);//结果:3     
    7. echo "<pre>";print_r($a);  
    8.   
    9. /** 
    10.  * 经array_push()数组函数处理后的结果: 
    11.  * Array( 
    12.  *   [0] => Dog 
    13.  *   [1] => Cat 
    14.  *   [2] => Array 
    15.  *       ( 
    16.  *           [0] => Horse 
    17.  *           [1] => Bird 
    18.  *       ) 
    19.  * ) 
    20.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第30题:array_rand() 函数从数组中随机选出一个或多个元素,并返回 
    3.  * 注意: 
    4.  *    (1)如果只选取一个元素,那么返回选定该元素的键名 
    5.  *    (2)如果不止选取一个元素,则返回包含随机键名的数组 
    6.  */  
    7. $a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");  
    8. echo "<pre>";print_r(array_rand($a,2));    
    9.   
    10. /** 
    11.  * 经array_rand()数组函数处理后的结果: 
    12.  * Array( 
    13.  *   [0] => b 
    14.  *   [1] => c 
    15.  * ) 
    16.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第31题:array_shift()将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变 
    3.  */  
    4. $stack = array(  
    5.     array("admin","123"),   
    6.     array("admin1","123"),   
    7.     array("admin2","123"),   
    8.     array("admin3","123")  
    9. );  
    10. $fruit = array_shift($stack);  
    11. echo "<pre>";print_r($fruit);  
    12. echo "<pre>";print_r($stack);   
    13.   
    14. /** 
    15.  * 经array_shift()数组函数处理后的结果: 
    16.  * Array( 
    17.  *   [0] => admin 
    18.  *   [1] => 123 
    19.  * ) 
    20.  
    21.  * Array( 
    22.  *   [0] => Array( 
    23.  *           [0] => admin1 
    24.  *           [1] => 123 
    25.  *       ) 
    26.  *   [1] => Array( 
    27.  *           [0] => admin2 
    28.  *           [1] => 123 
    29.  *       ) 
    30.  *   [2] => Array( 
    31.  *           [0] => admin3 
    32.  *           [1] => 123 
    33.  *       ) 
    34.  * ) 
    35.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第32题:array_unshift() 函数在数组开头插入一个或多个元素 
    3.  */  
    4. $stack = array(  
    5.     array("admin1","123"),   
    6.     array("admin2","123"),   
    7.     array("admin3","123")  
    8. );  
    9.   
    10. $num = array_unshift($stack,array("admin","123"));//返回数组元素个数  
    11. echo "<pre>";print_r($stack);   
    12.   
    13. /** 
    14.  * 经array_unshift()数组函数处理后的结果: 
    15.  
    16.  * Array( 
    17.  *   [0] => Array 
    18.         ( 
    19.             [0] => admin 
    20.             [1] => 123 
    21.         ) 
    22.  *   [1] => Array( 
    23.  *           [0] => admin1 
    24.  *           [1] => 123 
    25.  *       ) 
    26.  *   [2] => Array( 
    27.  *           [0] => admin2 
    28.  *           [1] => 123 
    29.  *       ) 
    30.  *   [3] => Array( 
    31.  *           [0] => admin3 
    32.  *           [1] => 123 
    33.  *       ) 
    34.  * ) 
    35.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第33题:PHP排序函数汇总 
    3.  * 总结: 
    4.  *   (1)arsort():按照数组键值对数组进行desc逆向排序并保持索引关系 
    5.  *   (2)asort() :按照数组键值对数组进行asc排序并保持索引关系 
    6.  
    7.  *   (3)krsort():按照数组键名对数组进行desc逆向排序并保持索引关系 
    8.  *   (4)ksort() :按照数组键名对数组进行asc排序并保持索引关系 
    9.  * 
    10.  *   (5)sort()/rsort()  :按照数组键值对数组进行asc或desc排序,本函数为数组中的单元赋予新的键名,原有的键名将被删除 
    11.  * 
    12.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第34题:reset()及 end() 使用 
    3.  * 
    4.  */  
    5. $stack = array(  
    6.     array("admin1","123"),   
    7.     array("admin2","123"),   
    8.     array("admin3","123")  
    9. );  
    10.   
    11. echo "<pre>";print_r(reset($stack));  
    12. /** 
    13.  * 经reset()数组函数处理后的结果: 
    14.  
    15.  * Array( 
    16.  *   [0] => admin1 
    17.  *   [1] => 123 
    18.  * ) 
    19.  */  
    20. echo "<pre>";print_r(end($stack));  
    21.   
    22. /** 
    23.  * 经end()数组函数处理后的结果: 
    24.  
    25.  * Array( 
    26.  *   [0] => admin3 
    27.  *   [1] => 123 
    28.  * ) 
    29.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第35题:crypt()及 md5() 单向加密函数的使用 
    3.  * 
    4.  */  
    5. echo crypt("123","v1pin")."<br/>";  
    6.   
    7. echo crypt("admin","v1pin")."<br/>";  
    8.   
    9. echo md5("admin");  
    [php] view plain copy
     
    1. /** 
    2.  * 第36题:parse_str() 函数把查询字符串解析到变量中 
    3.  * 
    4.  */  
    5. parse_str("id=23&name=John%20Adams");  
    6. echo $id."<br />";//23  
    7. echo $name."<br/>";//John Adams  
    8.   
    9. parse_str("id=23&name=John%20Adams",$arr);  
    10. echo "<pre>";print_r($arr);  
    11.   
    12. /** 
    13.  * 经parse_str()数组函数处理后的结果: 
    14.  * 
    15.  * Array( 
    16.  *   [id] => 23 
    17.  *   [name] => John Adams 
    18.  * ) 
    19.  */  
    [php] view plain copy
     
    1. //第37题:写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名,例如:/abc/de/fg.php?id=1 需要取出 php 或 .php  
    2. $url = "http://www.baidu.com/abc/de/fg.php?id=1";  
    3.   
    4. /** 
    5.  * parse_url($url):解析$url,并以关联数组形式返回url信息 
    6.  * 
    7.  * Array( 
    8.  *   [scheme] => http 
    9.  *   [host] => www.baidu.com 
    10.  *   [path] => /abc/de/fg.php 
    11.  *   [query] => id=1 
    12.  * ) 
    13.  */  
    14. $path = parse_url($url);  
    15. echo "<pre>";print_r($path);  
    16.   
    17.   
    18. /** 
    19.  * pathinfo() 函数以关联数组的形式返回文件路径的信息 
    20.  * 
    21.  * print_r(pathinfo($path['path']));//输入结果如下: 
    22.  * Array( 
    23.  *   [dirname] => /abc/de        等价于 dirname($path['path']); 
    24.  *   [basename] => fg.php        等价于 basename($path['path']); 
    25.  *   [extension] => php 
    26.  *   [filename] => fg 
    27.  * ) 
    28.  */  
    29. echo "<pre>"; print_r(pathinfo($path['path']));  
    30. echo pathinfo($path['path'],PATHINFO_DIRNAME)."<br/>";    //结果:"/abc/de"  PATHINFO_DIRNAME - 只返回 dirname  
    31. echo pathinfo($path['path'],PATHINFO_BASENAME)."<br/>";   //结果:"fg.php"       PATHINFO_BASENAME - 只返回 basename  
    32. echo pathinfo($path['path'],PATHINFO_EXTENSION)."<br/>";//结果:"php"        PATHINFO_EXTENSION - 只返回 extension  
    33. echo dirname($path['path'])."<br/>";  //结果:"/abc/de"  
    34. echo basename($path['path'])."<br/>"; //结果:"fg.php"  
    [php] view plain copy
     
    1. $url = "http://www.baidu.com/abc/de/fg.php?id=1";  
    2. echo basename($url)."<br/>";//结果:"fg.php?id=1"  
    3. echo strripos(basename($url),"?")."<br/>";//结果:6     strripos()-左边开始,字符最后一次出现的位置  
    4. echo substr(basename($url),0,strripos(basename($url),"?"))."<br/>";//结果:"fg.php"  
    5.   
    6.   
    7.   
    8. /** 
    9.  * 第38题:在HTTP 1.0中,状态码 401 的含义是();如果返回“找不到文件”的提示,则可用 header 函数,其语句为()。 
    10.  * 
    11.  *  答:未授权, 
    12.  *      header("HTTP/1.0 404 Not Found"); 
    13.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第39题:开启php.ini文件中的safe_mode选项,会影响到哪些函数的应用?至少说出四个 
    3.  * 
    4.  *  答:主要影响文件操作类函数、程序执行类函数 等等 
    5.  *      如:pathinfo()、basename()、fopen()、exec() 等等 
    6.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第40题:简述POST和GET传输的最大容量是多少? 
    3.  * 
    4.  *  (1)答:GET方法传递数据,控制在1MB之内,POST方法传输数据没有大小限制 
    5.  * 
    6.  *  (2)解析:GET方法提交的表单数据被附加到URL上,并作为URL的一部分发送到服务器端。URL的长度应限制在1MB字符以内。如果发送的数据量太大,数据将被截断,从而导致意外或失败的处理结果; 
    7.  *     POST方法不依赖于URL,不会将传递的参数值显示在地址栏中。另外,POST方法可以没有限制的向服务器端传递数据,所有提交的信息在后台传输,用户在浏览器端是看不到这一过程的,安全性高; 
    8.  */  
    [php] view plain copy
     
    1. /** 
    2. * 第41题:如何通过form表单控制上传文件的大小? 
    3. *  (1)答:在form表单中,通过隐藏域MAX_FILE_SIZE控制上传文件的大小,它必须放在文件域之前才能够起作用。 
    4. *  (2)解析:在客户端控制上传文件,应用的form表单中的enctype和method属性,以及隐藏域 MAX_FILE_SIZE 
    5. *      enctype="multipart/form-data"    //指定表单编码数据方式 
    6. *      method="post"                    //指定数据的传输方式 
    7. *      <input type="hidden" name="MAX_FILE_SIZE" value="10000" /> //通过隐藏域控制上传文件的大小(单位为字节),该值不能超过php.ini配置文件中 upload_max_filesize 选项设置的值 
    8. */  
    [php] view plain copy
     
    1. /** 
    2. * 第42题:用最简单的代码编写一个获取三个数字中最大值的函数 
    3. */  
    4. echo max(30,5,25);//结果:30  
    [php] view plain copy
     
    1.  /** 
    2.  * 第43题:如何将 1234567890 转换成 1,234,567,890 每三位用逗号隔开的形式? 
    3.  */  
    4. echo number_format("1234567890")."<br/>";         //结果:1,234,567,890      默认以逗号作为分隔符        
    5. echo number_format("1234567890",2)."<br/>";           //结果:1,234,567,890.00       参数2-指定小数位数  
    6. echo number_format("1234567890",2,",",".")."<br/>"; //结果:1.234.567.890,00     参数2-指定小数位数 参数3-规定替代小数点符号的字符串  参数4-规定用作千位分隔符的字符串  
    [php] view plain copy
     
    1.  /** 
    2.  * 第44题:如何尽可能高效的从标准URL中取得文件名 
    3.  */  
    4. $url = "http://www.baidu.com/abc/de/fg.php?id=1";  
    5. echo basename($url)."<br/>";//结果:"fg.php?id=1"  
    6. echo strripos(basename($url),"?")."<br/>";//结果:6     strripos()-左边开始,字符最后一次出现的位置  
    7. echo substr(basename($url),0,strripos(basename($url),"?"))."<br/>";//结果:"fg.php"  
    8. echo substr("fg.php?id=1",0,6);//结果:"fg.php"   参数3-截取的字符长度  
    [php] view plain copy
     
    1. /** 
    2.  * 第45题:stripos()、strpos()、strripos()、strrpos() 字符串函数的区别? 
    3.  * 
    4.  *  (1)stripos():返回字符串在另一字符串中第一次出现的位置(大小写不敏感) 
    5.  *  (2)strpos() :返回字符串在另一字符串中首次出现的位置(对大小写敏感) 
    6.  *  (3)strripos():查找字符串在另一字符串中最后出现的位置(对大小写不敏感) 
    7.  *  (4)strrpos():查找字符串在另一字符串中最后出现的位置(对大小写敏感) 
    8.  */  
    [php] view plain copy
     
    1. /** 
    2.  * 第46题:请写一个函数,实现以下功能:字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById" 
    3.  */  
    4.   
    5. function str_change($str) {  
    6.     $str = str_replace ( "_", " ", $str );  
    7.     $str = ucwords ($str);  
    8.     $str = str_replace(" ","",$str);  
    9.     return $str;   
    10. }  
    11.   
    12. echo str_change("open_door")."<br/>";//结果:"OpenDoor"  
    13. echo str_change("make_by_id")."<br/>";//结果:"MakeById"  
    14.   
    15. function str_change1($str) {  
    16.     $str_arr = explode("_", $str );  
    17.     foreach($str_arr as $key => $val){  
    18.         $str_arr[$key] = ucwords ($val);  
    19.     }  
    20.     return implode("",$str_arr);   
    21. }  
    22.   
    23. echo str_change1("open_door")."<br/>";//结果:"OpenDoor"  
    24. echo str_change1("make_by_id")."<br/>";//结果:"MakeById"  
    25. echo $str1=implode("",array_map(function($val){return ucwords($val);},explode("_","open_door")));//结果:"OpenDoor",提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组  
    26. echo $str2=implode("",array_map(function($val){return ucwords($val);},explode("_","make_by_id")));//结果:"MakeById",提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组  
    27. echo $str3=implode("",array_map('ucwords',explode("_","open_door")));//结果:"OpenDoor",提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组  
    28. echo $str4=implode("",array_map('ucwords',explode("_","make_by_id")));//结果:"MakeById" ,提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组  
    29. $arr1=explode("_","open_door");$flag=@array_walk($arr1,'ucwords');echo implode("",$arr1);//结果:"OpenDoor",提示:回调函数没有返回值;array_walk()对数组中每个元素使用回调函数,返回bool值  
    30. $arr2=explode("_","make_by_id");$flag=@array_walk($arr2,'ucwords');echo implode("",$arr2);//结果:"MakeById",提示:回调函数没有返回值;array_walk()对数组中每个元素使用回调函数,返回bool值  
    [php] view plain copy
     
    1. /** 
    2.  * 第47题:求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数 
    3.  */  
    4.   
    5. echo (strtotime("2007-3-6")-strtotime("2007-2-5"))/(3600*24);//结果:29 天  
    [php] view plain copy
     
    1. /** 
    2.  * 第48题:如何用php的环境变量得到一个网页地址的内容? 
    3.  * 如:"http://www.baidu.com/index.php?id=10" 
    4.  */  
    5.   
    6. echo $_SERVER['REQUEST_URI'];//结果:"/index.php?id=10"  
    [php] view plain copy
     
    1. /** 
    2.  * 第49题:array_map() 和 array_walk() 数组函数的区别? 
    3.  *  array_map() 返回用户自定义函数作用后的数组 
    4.  *  array_walk() 对数组中每个函数使用回调函数,返回bool值 
    5.  */  
    6.   
    7. $array = array('AAA', 'bbb');  
    8. $map_array = array_map('strtolower', $array);  
    9. /** 
    10.  * 输出结果: 
    11.  * Array( 
    12.  *      [0] => aaa 
    13.  *      [1] => bbb 
    14.  * ) 
    15.  */  
    16. print_r($map_array);  
    17. /** 
    18.  * 输出结果: 
    19.  * Array( 
    20.  *      [0] => AAA 
    21.  *      [1] => BBB 
    22.  * ) 
    23.  */  
    24. print_r($array);  
    25.   
    26.   
    27. //如果回调函数需要直接作用于数组中的值,可以将回调函数的第一个参数指定为引用:&$value  
    28. function array_walk_func(&$v, $k){  
    29.     $v = strtolower($v);  
    30. }  
    31. $walk_array = array_walk($array, 'array_walk_func');  
    32. /** 
    33.  * 输出结果:1 
    34.  */  
    35. print_r($walk_array);  
    36. /** 
    37.  * 输出结果: 
    38.  * Array( 
    39.  *      [0] => aaa 
    40.  *      [1] => bbb 
    41.  * ) 
    42.  */  
    43. print_r($array);  
    [php] view plain copy
     
    1. /** 
    2.  *第50题:如何使用php实现双向队列? 
    3.  */  
    4. class Deque{  
    5.     public $queue;  
    6.     public function __construct(){//构造函数,创建一个数组  
    7.         $this->queue = array();  
    8.     }  
    9.   
    10.     public function addFirst($item){//array_unshift() 函数在数组开头插入一个或多个元素。  
    11.         return array_unshift($this->queue , $item);  
    12.     }  
    13.   
    14.     public function removeFirst(){  
    15.         return array_shift($this->queue);//PHP array_shift() 函数删除数组中的第一个元素  
    16.     }  
    17.   
    18.     public function addLast($item){//给数组末尾追加元素,无指定下标,默认为数字  
    19.         return array_push($this->queue , $item);  
    20.     }  
    21.   
    22.     public function removeLast(){  
    23.         return array_pop($this->queue);//PHP array_pop() 函数删除数组中的最后一个元素  
    24.     }  
    25. }  

    目录:
    1、php如何打印出上周的时间格式?如:"2015-01-22 14:42:09"
    2、php如何打印出上周的时间格式?如:"2015-01-15 14:42:09"
    3、php如何打印出上个月的时间格式?如:"2014-12-22 14:42:09"
    4、简述一下echo、print、print_r 区别?
    5、php如何实现字符串反转?如:"abcdefg" 反转成 "gfedcba"
    6、php如何实现中文字符串截取无乱码的方法(mb_*系列函数)
    7、php如何写出显示客户端和服务器端IP的代码
    8、mysql中 IFNULL 控制流函数;IFNULL()
    9、简述include与require的区别?
    10、php如何获取一个字符串中指定的字符?
    11、php如何批量替换字符串中的特定字符?如:"批量替换$content内容字符串中的所有双引号为单引号"
    12、php如何将UEditor或FCkeditor编辑器中的内容转化为JSON串?
    13、php中addslashes()与 htmlspecialchars()区别
    14、php如何去除数组中重复的值?使用数组函数 array_unique() 可以做到
    15、php中$GLOBALS全局变量和global关键字的区别?
    16、php中回调函数 call_user_func() 如何使用?
    17、php中如何使用 array_multisort() 函数实现对多维数组进行排序?
    18、php中移除数组元素有几种方式?
    19、php中如何对数组元素进行递归转义?
    20、php中如何获取文件扩展名?
    21、php中如何查找一个字符串是否在数组元素中出现过,如何出现过,则返回该数组元素?
    22、php中常用的回调函数有哪些?
    23、php中递归反转义
    24、php中常用的编码函数汇总
    25、discuz中附件表的分表规则
    26、php中如何递归循环某目录下的子目录及文件并输出
    27、php中如何交换数组中的键和值?
    28、php中如何删除数组中最后一个元素?
    29、php中如何向数组的尾部添加一个或多个元素?
    30、php中如何从数组中随机选出一个或多个元素,并返回
    31、php中如何将数组中的第一个元素移出?
    32、php中如何在数组开头添加一个或多个元素?
    33、php中排序函数汇总
    34、php中reset()及end()函数的使用
    35、php中crypt()及md5()单向加密函数的使用
    36、php中parse_str()函数把查询字符串解析到变量中
    37、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名,例如:/abc/de/fg.php?id=1 需要取出 php 或 .php
    38、在HTTP 1.0中,状态码 401 的含义是();如果返回“找不到文件”的提示,则可用 header 函数,其语句为()
    39、开启php.ini文件中的safe_mode选项,会影响到哪些函数的应用?至少说出四个
    40、简述POST和GET传输的最大容量是多少?
    41、如何通过form表单控制上传文件的大小?
    42、用最简单的代码编写一个获取三个数字中最大值的函数?
    43、如何将 1234567890 转换成 1,234,567,890 每三位用逗号隔开的形式?
    44、如何尽可能高效的从标准URL中取得文件名?
    45、php中stripos()、strpos()、strripos()、strrpos() 字符串函数的区别?
    46、请写一个函数,实现以下功能:字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById"
    47、php中如何求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
    48、如何用php的环境变量得到一个网页地址的内容?
    49、php中回调函数array_map()和array_walk()的区别?
    50、如何使用php实现双向队列?
  • 相关阅读:
    BZOJ 3529 数表
    BZOJ 3832 Rally
    BZOJ 1086 王室联邦
    BZOJ 2738 矩阵乘法
    2656565
    小L的区间求和
    小L的直线
    Co-prime 杭电4135
    POJ 跳蚤
    B
  • 原文地址:https://www.cnblogs.com/yszr/p/7873309.html
Copyright © 2011-2022 走看看