php 常见面试题(3)
1、数组$a = array('a'=>'a','b'=>'b','c'=>'c'),如何将array(‘d’=>'d')快速插入 a 和 b 之间?
function wpjam_array_push($array, $data=null, $key=false){ $data = (array)$data; $offset = ($key===false)?false:array_search($key, array_keys($array)); $offset = ($offset)?$offset:false; if($offset){ return array_merge( array_slice($array, 0, $offset), $data, array_slice($array, $offset) ); }else{ // 没指定 $key 或者找不到,就直接加到末尾 return array_merge($array, $data); } } $data = array("d"=>'d'); $b = wpjam_array_push($a,$data,"b"); print_r($b);
2、写一个遍历目录下所有文件以及子目录的函数
function my_scandir($dir) { $files = array(); if ( $handle = opendir($dir) ) { while ( ($file = readdir($handle)) !== false ) { if ( $file != ".." && $file != "." ) { if ( is_dir($dir . "/" . $file) ) { $files[$file] = scandir($dir . "/" . $file); }else { $files[] = $file; } } } closedir($handle); return $files; } } $files=my_scandir('E:\PhpStudy\WWW\12_twleve_month\8-2'); echo "<pre>"; print_r($files);
3、用php实现一个双向队列。
队列是一种线性表,按照先进先出的原则进行
单向队列:只能从头进,从尾出
双向队列:头尾都可以进出
class DuiLie { private $array = array();//声明空数组 public function setFirst($item){ return array_unshift($this->array,$item);//头入列 } public function delFirst(){ return array_shift($this->array);//头出列 } public function setLast($item){ return array_push($this->array,$item);//尾入列 } public function delLast(){ return array_pop($this->array,$item);//尾出列 } public function show(){ var_dump($this->array);//打印数组 } public function Del(){ unset($this->array);//清空数组 } }
4、$arr = [
['name' => '张三', 'phone' => '123456', 'reg_time' => '2015-12-25'],
['name' => '李四', 'phone' => '345698', 'reg_time' => '2015-12-26'],
['name' => '张三', 'phone' => '123456', 'reg_time' => '2015-12-27'],
['name' => '张三', 'phone' => '12345678', 'reg_time' => '2015-12-28'],
['name' => '小王', 'phone' => '345698', 'reg_time' => '2015-12-26']
];
根据 name + phone 去重,只保留一条
/*针对任意键值来进行去重*/ function getArrayUniqueByKeys($arr) { $arr_out =array(); foreach($arr as $k => $v) { $key_out = $v['name']."-".$v['phone']; //提取内部一维数组的key(name age)作为外部数组的键 if(array_key_exists($key_out,$arr_out)){ continue; } else{ $arr_out[$key_out] = $arr[$k]; //以key_out作为外部数组的键 $arr_wish[$k] = $arr[$k]; //实现二维数组唯一性 } } return $arr_wish; } $arr_wish = getArrayUniqueByKeys($arr); echo "<pre>"; print_r($arr_wish);
5、设计一个简单的单例模式