PHP 技術者 - 口頭試験の概要 PHP 記事
PHP技术人员--面试总结PHP篇
1、实现中文字符串截取无乱码方法
开启mbstring扩展,然后自定义函数:
<?php header('content-Type:text/html:charset=utf-8'); function substr_utf8($str, $start, $length = null) { return join("", array_slice( preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length) ); } //实例 (PS:^_^不错的php学习交流群:276167802,验证:csl,有兴趣的话可以加入进来一起讨论) $str = "我是一个good男孩!"; echo substr_utf8($str, 2, 4);
2、用PHP打印前一天的时间
<?php header('content-Type:text/html:charset=utf-8'); echo date('Y-m-d H:i:s',strtotime('-1 day'));
3、不适用第三个变量交换2个变量的值
<?php header('content-Type:text/html:charset=utf-8'); $a = 'a'; $b = 'b'; list($a,$b) = array($b,$a); echo $a,$b;
4、将1234567890,转换成1,234,567,890
header('content-Type:text/html:charset=utf-8'); $str = '1234567890'; //反转字符串 $str = strrev($str); //使用逗号分隔得到098,765,432,1, $str = chunk_split($str,3,','); //再次反转 $str = strrev($str); //去掉左边的, $str = ltrim($str,','); echo $str;
5、实现utf8字符串反转
不能使用strrev,中文会出错
function strrev_utf8($str){ return join("",array_reverse(preg_split("//u",$str))); } $str = "我是一个good男孩"; echo strrev_utf8($str); 6、取url的文件扩展名,尽量多的去实现方法 $str = "www.baidu.com/index.php"; function get_ext1($str){ return strrchr($str,'.'); } function get_ext2($str){ return substr($str,strrpos($str,'.')); } function get_ext3($str){ $str = pathinfo($str); return $str['extension']; } function get_ext4($str){ $arr = explode('.',$str); return $arr[count($arr)-1]; } function get_ext5($str){ $pattern = '/^[^\.]+\.([\w]+)$/'; return preg_replace($pattern,'${1}',basename($str)); }
7、写一个函数,将字符串open_door转换为OpenDoor
$str = "open_door"; function change_str($str){ $arr = explode('_',$str); $arr = array_map('ucfirst',$arr); return implode('',$arr); } echo change_str($str);
8、单例模式
<?php class Mysql{ private static $instance = null; private $conn; //设置为私有,不允许通过new获得对象 private function __construct(){ $conn = mysql_connect('localhost','root','123456'); } //获取实例方法 public static function getInstance(){ if(! self::$instance instanceof self){ self::$instance = new self; } return self::$instance; } //禁止克隆 private function __clone(){} } $db = Mysql::getInstance(); 9、写一段PHP代码,确保多个进程同时写入同一个文件成功 <?php $fp = fopen("lock.txt","w+"); if(flock($fp,LOCK_EX)){ //获得写锁 fwrite($fp,'write something'); flock($fp,LOCK_UN); }else{ echo "file is locking..."; } fclose($fp);
10、从一个完成的url获取文件扩展名
<?php $url = 'http://www.baidu.com/a/b/index.php?id=1'; $arr = parse_url($url); $fname = basename($arr['path']); $arr = explode('.',$fname); echo $arr[count($arr)-1];
11、写一个函数可以便利一个文件夹下的所有文件和子文件夹
<?php function my_scandir($dir){ $files = array(); if(is_dir($dir)){ if($handle = opendir($dir)){ while(($file = readdir($handle)) !== false){ if($file != "." && $file != ".."){ if(is_dir($dir.'/'.$file)){ $files[$file] = my_scandir($dir.'/'.$file); }else{ $files[] = $dir.'/'.$file; } } } closedir($handle); return $files; } } } var_dump(my_scandir('D:\wamp\www\study'));
12、论坛中无限分类实现原理
首先设计数据库表
create table category( cate_id int unsigned not null auto_increment primary key, cat_name varchar(30) not null default '', parent_id int unsigned not null default 0 ) engine=innodb charset=utf8; 然后用函数去递归实现,无限分类 function tree($arr,$pid=0,$level=0){ static $list = array(); foreach($arr as $v){ //如果是顶级分类,则存入$list //然后以此节点为根几点,遍历其子节点 if($v['parent_id'] == $pid){ $v['level'] = $level; $list[] = $v; tree($arr,$v['cat_id'],$level+1); } } return $list; }
13、计算2个文件的相对路径
<?php $a = '/a/b/c/d/a.php'; $b = '/a/b/e/f/b.php'; $arr1 = explode('/',dirname($a)); $arr2 = explode('/',dirname($b)); for($i=0,$len=count($arr2);$i<$len;$i++){ if($arr1[$i] != $arr2[$i]){ break; } } //不在用一个根目录 if($i == 1){ $ret = array(); } //在同一个根目录下 if($i != 1 && $i < $len){ $ret = array_fill(0,$len-$i,".."); } //在同一个目录下 if($i == $len){ $ret = array('./'); } $ret = array_merge($ret,array_slice($arr1,$i)); echo implode('/',$ret); 14、约瑟夫环问题 <?php function king($n,$m){ $monkey = range(1,$n); $i = 0; while(count($monkey) > 1){ $i += 1; $head = array_shift($monkey);//一个个出列最前面的 if( $i % $m != 0){ //如果不是m的倍数,则返回尾部,否则就出列了 array_push($monkey,$head); } } return $monkey[0]; } echo king(10,7);
15、PHP实现双向队列
<?php class Dqueue{ private $queue = array(); public function addFirst($item){ return array_unshift($this->queue,$item); } public function addLast($item){ return array_push($this->queue,$item); } public function getFirst(){ return array_shift($this->queue); } public function getLast(){ return array_pop($this->queue); } }
希望本文对广大php开发者有所帮助,感谢阅读本文。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C 言語における return の使い方は、 1. 戻り値の型が void の関数については、return 文を使用して関数の実行を早期に終了することができます; 2. 戻り値の型が void ではない関数については、 return ステートメントは、関数の実行を終了するためのものです。結果は呼び出し元に返されます。 3. 関数の実行を早期に終了します。関数内で return ステートメントを使用して、関数の実行を早期に終了することもできます。関数が値を返さない場合。

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

ソースコード: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#出力 上記のコードの出力は、単純に次のように結論付けることができます:finally の前に return が実行されます。バイトコード レベルで何が起こるかを見てみましょう。以下は、case1 メソッドのバイトコードの一部をインターセプトし、ソース コードを比較して、各命令の意味に注釈を付けます。

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

この記事では、Python の enumerate() 関数と「enumerate()」関数の目的について学びます。 enumerate() 関数とは何ですか? Python の enumerate() 関数は、データ コレクションをパラメータとして受け取り、列挙オブジェクトを返します。列挙オブジェクトはキーと値のペアとして返されます。キーは各項目に対応するインデックス、値は項目です。構文 enumerate(iterable,start) パラメータ iterable - 渡されたデータ コレクションは、iterablestart と呼ばれる列挙オブジェクトとして返すことができます。 - 名前が示すように、列挙オブジェクトの開始インデックスは start によって定義されます。無視したら

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

MySQL.proc テーブルの役割と機能の詳細な説明。MySQL は人気のあるリレーショナル データベース管理システムです。開発者が MySQL を使用する場合、多くの場合、ストアド プロシージャ (StoredProcedure) の作成と管理が必要になります。 MySQL.proc テーブルは非常に重要なシステム テーブルであり、ストアド プロシージャの名前、定義、パラメータなど、データベース内のすべてのストアド プロシージャに関連する情報が保存されます。この記事では、MySQL.proc テーブルの役割と機能について詳しく説明します。

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ
