您的位置:首页 > 编程语言 > PHP开发

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

2010-01-20 22:10 746 查看

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: