PHP 自定义函数实现系统函数功能

PHP 自定义函数实现系统函数功能

老是用别人写好的函数 是否是以为不爽?好,下面跟着我来写吧~~如下代码所有由本身编写,绝无抄袭之嫌~~现贴上,仅供参考.(可能有些功能没有写全) 
说明一下, 写系统函数再拿来使用确实很蠢,但只是做为练习,还有,在面试时确实是算法考得多,网上找来的面试题也大都要靠算法/语法熟练才能完成~~! 

1,自定义函数实现strlen()函数的功能,该函数返回一个字符串的长度; 
function my_strlen2($str){ 
if (!is_string($str)){ 
  return false; 
 } 
for ($i=0;($str{$i}) !=="";$i++); 
  return $i; 
}
 

2,自定义函数实现strrev()函数功能,该函数把一段字符串倒过来输出(即字符串反转); 
function my_strrev($str){ 
  $cut = ''; 
  for ($i = 0; $str{$i}!==''; $i++){ 
  $cut = $str{$i}.$cut; 
  } 
  return $cut; 
}
 
更简单的方法: 
function myStrlen($str){ 
 for ($i=0; $str[$i]!==''; $i++); 
 return $i; 

for ($i=myStrlen($str); $i>-1; $i--){ 
 $res .= $str[$i]; 

echo $res; 

3.自定义函数实现count()函数功能,该函数返回数组中元素的个数; 
function my_count($arr){ 
if (!is_array($arr)){ 
  return false; 

$i = 0; 
while ($arr{$i}){ 
  $i++; 

  return $i; 
}
 

4.冒泡排序法; 
function my_sort($arr){ 
 $len = count($arr); 
 for ($i=0; $i<$len-1; $i++){ 
  for ($j=$i; $j<$len; $j++){ 
   if ($arr[$i] > $arr[$j]){ 
    $res     = $arr[$i]; 
    $arr[$i] = $arr[$j]; 
    $arr[$j] = $res; 
   } 
  } 
 } 
 return $arr; 
}
 

5.自定义函数实现strpos()函数功能,该函数返回一个字符在字符串中的位置; 
function my_strpos($str1,$str2){ 
 if (!is_string($str1) || !is_string($str2)){ 
  return false; 
 } 
 $i = 0; 
 while (($res = $str1{$i}) !== ""){ 
  $i++; 
  if ($res === $str2){ 
   return $i-1; 
  } 
 } 
 return false; 
}
 

6.自定义函数实现strstr()函数功能,该函数截取指字符串后面的字符; 
function my_strstr2($str1,$str2){ 
 if (!is_string($str1) || !is_string($str2)){ 
  return false; 
 } 
 for ($i=0;($res=$str1{$i}) !== "";$i++){ 
  if ($res === $str2){ 
   for ($j=$i;($res=$str1{$j}) !=="";$j++){ 
    echo $res; 
   } 
   break; 
  } 
 } 
}
 

7.试完成一个程序,它统计天然数1到1000000中,至少有一位数为7(例如,307)的数字个数。 
function myStrpos($str,$num){  //检测字符串是否存在某个值,如存在返回 true, 不然为 false 
 if (!is_string($str)){   //判断接受的数据是否为 string 型,若是不是则进行强制转换 
  settype($str,"string"); 
 }
 
 for ($i=0; ($res=$str[$i])!=='';$i++){ 
  if ($res === $num) 
   return true; 
 } 
 return false; 
}
 
for($num=1; $num<1000; $num++){  //考虑到系统资源,只用1000作测试; 
    if(myStrpos($num, '7') !== false){ 
  $arr[] = $num; 
    } 
}
 

8.自定义函数实现array_diff()功能该函数返回两个数组的差集部分(返回数组1中有但数组2中没有的元素),保持键名不变 
function my_in_array($str,$arr){   //自定义 in_array() 函数,备用 
 foreach ($arr as $val){ 
  if ($str === $val){ 
   return true; 
  } 
 } 
 return false; 
}
 
function my_array_diff($arr1,$arr2){ 
 $arr = array(); 
 foreach ($arr1 as $key=>$val1){ 
  if (!my_in_array($val1,$arr2)){ 
   $arr[$key]  = $val1;   //保持键名不变 
  } 
 } 
 return $arr; 

$arr1 = array("a" => "green", "red", "color"=>"blue", "fruit"=>"apple"); 
$arr2 = array("b" => "green", "yellow", "red"); 
print_r (my_array_diff($arr1,$arr2));  //测试函数功能 


9.自定义函数实现array_fill()功能该函数用给定的值填充数组, 
function my_array_fill2($num1,$num2,$str){
 
 $arr = array(); 
 for ($i=1; $i<=$num2; $i++){ 
  $arr[] = $str; 
  foreach ($arr as $key=>$val){ 
   $arr[$key] = $key+$num1; 
  } 
  foreach ($arr as $key=>$val){ 
   $key = $str; 
   $arr2[$val] = $key; 
  } 
 } 
 return $arr2; 

print_r (my_array_fill2(2,6,"hello"));
 

10.自定义函数实现str_split()功能该函数把一段字符串切割到一个数组中,默认值的长度为1 
function my_str_split($str,$num){  for ($i=0;($str{$i})!=='';$i++){   $result[] = $str{$i};   //遍历字符串,把每一次截取到的字符放入数组中   if (isset($num)){    //若是设定了变量,则执行下面的操做    for ($i=0;($cha=$str{$i})!=='';$i++){     //$cut = floor($i/$num);  //舍去法取整     $cut = (int)$i/$num; //或者强制转成整型     $result2{$cut}.=$cha;    }    return $result2;   }  }  return $result; } $str = "good morning sir!"; print_r (my_str_split($str,3)); 今天继续贴一些: 11. 自定义函数实现http_build_query()功能,该函数生成 URL-encode 以后的请求字符串 function my_http_build_query($arr){  $bool = true;  foreach ($arr as $key=>$val){   if ($bool){    $res .= $key.'='.$val;    $bool = false;   } else {    $res .= '&'.$key.'='.$val;   }  }  for ($i=0;($cut=$res{$i})!=='';$i++){ //遍历字符串   if ($cut === ' '){     //若是字符串中某个位置为空    $res{$i} = '+';     //就用+号替换它,至关于str_replace函数   }  }  return $res; } $arr = array('foo','bar','third'=>'baz','boom','cow'=>'milk','php'=>'hypertext processor'); echo my_http_build_query($arr);echo '<br/>'; echo http_build_query($arr); 12. 自定义函数实现str_replace()功能,该函数把字符串的某些值替换成指定值 function my_str_replace($arr, $str1, $str2){  foreach ($arr as $val){   for ($i=0; ($cut=$str2{$i})!==''; $i++){    if ($cut === $val){     $str2{$i} = $str1;    }   }  }  return $str2; } $arr = array("e","P","I","H"); $str2 = "Hello World of PHP, I'm at home now!"; echo my_str_replace($arr,"-",$str2); //测试函数 13. 面试题 <?php /* 1.(获取字母组合) 题目要求: 作一个三位字母的组合功能。型如“abd,ade,acc,aef等等”; 目标: 1)字母的全部组合须要打印出来 2)字母组合要排除。abc(三个字母顺连续),cba(三个字母倒连续) ,aaa(三个字母相同)的状况 3)最后结果须要计算出 abc状况的数量,cba状况的数量,aaa状况的数量,以及打印出来正确字母组合的数量。 */ /* 思路: 一,可利用字母所对应的ACSII码进行操做  字母A-Z对应ACSII码:97-122 二,自用PHP chr()函数对字母进行ASCII-->字母转换 三,用for循环对字母的ASCII码进行组合排列 */ /* 结果: 该程序基本实现了题目要求,下面是处理结果: 1) 全部字母组合的数量为:  17576; 2) 三个字母相同组合的数量为: 26; 3) 三个字母正连续组合的数量为 24; 4) 三个字母倒连续组合的数量为:  24; 5) 正确字母组合的数量为:   17502; 其余: 于题意,程序未实现打印除上述组合的组合,只是求得了它的结果数量. */ function my_test(){      //1)计算出全部字母组合  for ($i=97;$i<=122;$i++){   for ($j=97;$j<=122;$j++){    for ($k=97;$k<=122;$k++){     $arr[] = chr($i).chr($j).chr($k);    }   }  }  return $arr; } $res = my_test(); echo count($res);      //全部字母组合的数量 echo '<br/>'; for ($l=97;$l<=122;$l++){  foreach ($res as $value){   if ($value === chr($l).chr($l).chr($l)){    //2) 计算出三连续组合    $res1[]  = $value;   }   elseif ($value === chr($l).chr($l+1).chr($l+2)){  //3) 计算出正连续组合    $res2[]  = $value;   }   elseif ($value === chr($l).chr($l-1).chr($l-2)){  //4) 计算出倒连续组合    $res3[]  = $value;   }  } } print_r (count($res1));echo '<br/>'; //三连续组合的数量 print_r (count($res2));echo '<br/>'; //正连续组合的数量 print_r (count($res3));echo '<br/>'; //倒连续组合的数量 $exp = count($res)-count($res1)-count($res2)-count($res3);  //计算正确字母组合的数量 echo $exp;