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:PhpStudyWWW12_twleve_month8-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、设计一个简单的单例模式

原文地址:https://www.cnblogs.com/lpblogs/p/7452342.html