【总结】PHP常见面试题汇总(二)。。。

//第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数
$array=array(4,5,1,2,3,1,2,"a","a");

$ac=array_count_values($array);

/**
 * 输出结果:
 * Array(
 *   [4] => 1
 *   [5] => 1
 *   [1] => 2
 *   [2] => 2
 *   [3] => 1
 *   [a] => 2
 * )
 */
echo "
";print_r($ac);
//第52题:如何统计字符串中每种字符的出现次数并排序?
function countStr($str){ 
	$str_array=str_split($str);//str_split()函数能将字符串中每个字符都转化为数组的元素 
	$str_array=array_count_values($str_array); 
	arsort($str_array);//arsort()函数对数组进行逆向排序并保持索引关系
	return $str_array;
} 
$str="asdfgfdas323344##$\$fdsdfg*$**$*$**$$443563536254fas";
/**
 * 输出结果:
 * Array(
    [$] => 7
    [3] => 6
    [*] => 6
    [4] => 5
    [f] => 5
    [s] => 4
    [d] => 4
    [5] => 3
    [a] => 3
    [6] => 2
    [2] => 2
    [g] => 2
    [#] => 2
  )
 */
echo "
";print_r(countStr($str)); 
//第53题:str_word_count() 函数计算字符串中的单词数?

/**
 * 输出结果:2
 */
echo str_word_count("Hello world!");//参数二:默认0,返回单词的数目

/**
 * 输出结果:
   Array(
    [0] => Hello
    [1] => world
   )
 */
echo "
";print_r(str_word_count("Hello world!",1));//参数二:1-返回包含字符串中的单词的数组

/**
 * 输出结果:
   Array(
    [0] => Hello
    [6] => world
   )
 */
echo "
";print_r(str_word_count("Hello world!",2));//参数二:2-返回一个数组,其中的键是单词在字符串中的位置,值是实际的单词.
将键名限制在250字节,值也被限制在不超过1MB,且只适用于普通字符串.
 *
 *      何时使用memcached:
 *
 *		(1)小型静态数据:当我们需要缓存小型静态数据的时候可以考虑memcached,最具代表性的例子就是HTML代码片段;因为memcached的内部内存管理机制虽然不像redis的那样复杂,但却更具实际效率,这是因为memcached在处理元数据时所消耗的内存资源相对更少.作为memcached所支持的惟一一种数据类型,字符串非常适合用于保存那些只需要进行读取操作的数据,因为字符串本身无需进行进一步处理.
 *
 */
?>
 

 
  
 
  
db->cache_all($sql);//获取缓存数据(如果缓存数据过期,则重新查询数据库并将查询到的数据放到memcache中并返回)
}

//第二步:获取memcache中缓存数据
public function cache_all($sql, $reload = false, $limit = null) {//参数1-sql语句、参数2-是否从数据库中重新获取数据并写入memcache、参数3-每次获取记录数量
	$this->reload = $reload;
	$sql = $this->get_query_sql($sql, $limit);//拼接sql语句,如:'select * from order_master limit 0,10'
	return $this->get_cache($sql, 'get_all');//参数1-拼接的sql、参数2-要执行的方法名;将sql语句作为参数调用get_all()方法
}

//第三步:从memcache中获取缓存数据 提示:1、如果缓存数据过期,则重新查询数据库并将查询结果放到memcache缓存中,返回数据. 2、如果缓存数据未过期,则直接获取缓存数据
protected function get_cache($sql,$method) {
	$cache_file = md5($sql.$method);//memcache中缓存数据的键名,格式:键名=md5(sql语句+方法名) 提示:一定要保证键名唯一
	$res = $this->cache->get($cache_file);//根据缓存数据的键名获取键值
	if(!$res) {//memcache中缓存数据过期的情况//如果memcache中缓存数据过期,则重新从数据库中获取数据,并将结果以键值对形式存储到memcache中
		$res= $this->$method($sql);//调用 $this->get_all($sql);//直接从数据库中获取数据并返回
		if($res && $this->cache_mark && !$this->reload) {
			$this->cache->set($cache_file, $res);//将数据库中查询到的数据以键值对形式set到memcache缓存中
		}
	}
	return $res;//返回数据
}

//第四步:直接从数据库中获取数据并返回
public function get_all($sql, $limit = null, $fetch_mode = MYSQLI_ASSOC) {
	$this->query($sql, $limit);
	$all_rows = array();
	$this->fetch_mode = $fetch_mode;
	while($rows = $this->fetch()) {
		$all_rows[] = $rows;
	}
	$this->free();
	return $all_rows;
}
?>
 
  
//第58题:文件缓存的使用案例
public function &get($key, $cache_time = '') {
		if(empty ($cache_time)) {
			$cache_time	= $this->cache_time;//缓存时间
		} else {
			$cache_time	= intval($cache_time);//缓存时间
		}
		$cache_encode_key  = $this->get_key($key);//获取一个唯一的长字符串
                //缓存文件的命名和缓存文件的存放位置
		$filename = $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/'.$cache_encode_key.".cache.php";
		if(!is_file($filename) || time() - filemtime($filename) > $cache_time) {//如果缓存文件不存在或者缓存文件过期,则返回false
			return false;
		} else {
			return unserialize(file_get_contents($filename));//如果缓存文件存在且未过期,那么读取缓存文件内容并返回
		}
	}
	public function set($key,$data) {
		$cache_encode_key  = $this->get_key($key);
		$cache_dir	= $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/';//缓存文件的缓存目录
		$filename	= $cache_dir.$cache_encode_key.".cache.php";//缓存文件名
		if( $this->mkpath($cache_dir) ) {//递归创建缓存目录
			$out    = serialize($data);//将要缓存的数据序列化
			file_put_contents($filename, $out);//将序列化的数据写入到缓存文件中
		}
	}
	public function add($key, $data) {
		$cache_encode_key	= $this->get_key($key);
		$cache_dir	= $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/';//缓存目录
		$filename	= $cache_dir.$cache_encode_key.".cache.php";//缓存文件名
		if(is_file($filename)) {//如果缓存文件存在,则返回false
			return false;
		} else {//如果缓存文件不存在,则生成一个新的缓存文件到缓存目录
			$this->set($key, $data);
		}
	}
	public function del($key) {
		$cache_encode_key	= $this->get_key($key);
		$cache_dir	= $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/';//缓存目录
		$filename	= $cache_dir.$cache_encode_key.".cache.php";//缓存文件名
		if(is_file($filename)) {//如果缓存文件存在则返回false
			return false;
		} else {//如果缓存文件不存在,则删除缓存文件
			@unlink($filename);
		}
	}

        public function get_key($key){
                return md5(CACHE_KEY.$key);//md5加密字符串
        }

//第59题:redis使用案例
//推送活动商品上线

    public function push_activity_goods_online($data) {
        $key = sprintf($this->config->item('activity_goods_push_key'), $data['goods_id']);

        $this->cache->redis->delete($key);
        $this->load->driver('cache', array('adapter' => 'redis'));
        return $this->cache->redis->hmset($key, $data);
    }

    //拉取上线活动商品

    public function pull_activity_goods_online($key) {
        $key = sprintf($this->config->item('activity_goods_push_key'), $key);
        $this->load->driver('cache', array('adapter' => 'redis'));

        return $this->cache->redis->hgetall($key);
    }

    //删除上线的活动商品

    public function del_activity_goods_online($key) {
        $key = sprintf($this->config->item('activity_goods_push_key'), $key);
        $this->load->driver('cache', array('adapter' => 'redis'));
        return $this->cache->redis->delete($key);
    }

    //推送活动上线

    public function push_activity_online($data) {

        $activity_push_key = $this->config->item('activity_push_key');
        //非通用平台作用哉活动,活动前缀+平台作用域
        if (isset($data['plateform']) && ($data['plateform']) != 'all') {
            $activity_push_key = $data['plateform'] . ':' . $activity_push_key;
        }

        //订单促销
        if ($data['activity_range'] == 1) {
            $key = sprintf($activity_push_key, 'order');
        } else {
            $key = sprintf($activity_push_key, $data['activity_id']);
        }

        $this->cache->redis->delete($key);
        $this->load->driver('cache', array('adapter' => 'redis'));
        return $this->cache->redis->hmset($key, $data);
    }

    //拉取上线活动

    public function pull_activity_online($key) {
        if ($key == 'order') {
            $key = sprintf($this->config->item('activity_push_key'), 'order');
        }if ($key == 'mobile:order') {
            $key = "mobile:" . sprintf($this->config->item('activity_push_key'), 'order');
        } else {
            $key = sprintf($this->config->item('activity_push_key'), $key);
        }

        $this->load->driver('cache', array('adapter' => 'redis'));

        return $this->cache->redis->hgetall($key);
    }

    //删除上线的活动

    public function del_activity_online($key, $activity = array()) {
        $activity_push_key = $this->config->item('activity_push_key');

        //非通用平台作用哉活动,活动前缀+平台作用域
        if (isset($activity['plateform']) && ($activity['plateform']) != 'all') {
            $activity_push_key = $activity['plateform'] . ':' . $activity_push_key;
        }
        $key = sprintf($activity_push_key, $key);
        $this->load->driver('cache', array('adapter' => 'redis'));
		//echo "redis->delete:" . $key . "\r\n
"; return $this->cache->redis->delete($key); } //获取全部活动 public function pull_all_activity_online() { $aids = array(); $key = "*" . sprintf($this->config->item('activity_push_key'), "*"); $this->load->driver('cache', array('adapter' => 'redis')); $hashname = $this->cache->redis->keys($key); if (is_array($hashname)) { $prefix_key = str_replace("%s", '', $this->config->item('activity_push_key')); foreach ($hashname as $key => $value) { /* if ($value == ($prefix_key . "order")) { continue; } */ $aid = str_replace($prefix_key, "", $value); $aids[] = $aid; } return $aids; } else { return null; } } //获取所有活动商品 public function pull_all_activity_goods_online() { $aids = array(); $key = sprintf($this->config->item('activity_goods_push_key'), "*"); $this->load->driver('cache', array('adapter' => 'redis')); $hashname = $this->cache->redis->keys($key); if (is_array($hashname)) { $prefix_key = str_replace("%s", '', $this->config->item('activity_goods_push_key')); foreach ($hashname as $key => $value) { $aid = str_replace($prefix_key, "", $value); $aids[] = $aid; } return $aids; } else { return null; } } //获取线上活动商品by goods_id public function get_activity_goods_online($product_id) { if (empty($product_id)) { return false; } $activity_goods = $this->pull_activity_goods_online($product_id); if (!empty($activity_goods)) { return $activity_goods; } return false; }
//第60题:php如何读取php.ini配置文件中的配置选项的值
echo ini_get('post_max_size');//获取上传文件的最大尺寸
echo get_cfg_var('post_max_size');//获取上传文件的最大尺寸
//第61题:php中如何动态的调用一个函数
$name_list = '小强,张三,李四,王五,马六';
$funName = 'explode';//函数名当作字符串
echo "
";print_r($funName(',',$name_list));
echo "
";print_r(call_user_func_array($funName,array(',',$name_list)));

/**
 * 结果:
 *	Array(
 *		[0] => 小强 
 *		[1] => 张三
 *		[2] => 李四
 *		[3] => 王五
 *		[4] => 马六
 *	)
 *
 *	Array(
 *		[0] => 小强
 *		[1] => 张三 
 *		[2] => 李四
 *		[3] => 王五
 *		[4] => 马六
 *	)
 */
/**
 *第62题:__call是魔术方法
 *		__call是魔术方法是指请求的方法不存在的时候采用的哪种处理方式;如果请求的方法名存在(跟参数列表无关),则不会调用此魔术方法
 */
class MethodTest {
	 /**
	  * 再如:
	  *		  public function __call($funName, $args){//参数1-要调用的方法名   参数2-传递给要调用方法的参数列表
	  *				switch (count($args)) {
	  *					case 0:
	  *						return $this->$funName();
	  *					case 1:
	  *						return $this->$funName($args[0]);
	  *					case 2:
	  *						return $this->$funName($args[0], $args[1]);
	  *					case 3:
	  *						return $this->$funName($args[0], $args[1], $args[2]);
	  *					case 4:
	  *						return $this->$funName($args[0], $args[1], $args[2], $args[3]);
	  *					case 5:
	  *						return $this->$funName($args[0], $args[1], $args[2], $args[3], $args[4]);
	  *					default:
	  *						return call_user_func_array($this->$funName, $args);
	  *				}
	  *		}
	  */
     public function __call($name,$arguments) {//参数1-调用的方法名	参数2-传递给调用方法的参数列表
		if(method_exists($this,$name)){
			return $this->$name();
		}else{	
			echo "调用的方法 $name() 不存在;传递给 $name() 方法的参数列表如下:".implode(',',$arguments)."\n";
		}
     }
}
$obj = new MethodTest();
//结果:调用的方法 runTest() 不存在;传递给 runTest() 方法的参数列表如下:李四,张三 
$obj->runTest('李四','张三');//方法名、参数列表
//第63题:php.ini配置文件的解析

    (1)如:配置文件 test.ini

        [names]
        me = Robert
        you = Peter

        [urls]
        first = "http://www.example.com"
        second = "http://www.w3school.com.cn"
    
    (2)代码:

       结果:
            Array(
                [me] => Robert
                [you] => Peter
                [first] => http://www.example.com
                [second] => http://www.w3school.com.cn
            )
    
    (3)代码:

       结果:
            Array(
                [names] => Array(
                    [me] => Robert
                    [you] => Peter
                )
                [urls] => Array(
                    [first] => http://www.example.com
                    [second] => http://www.w3school.com.cn
                )
            )
 
  
发生在子类与父类之间 
 *		重载:		指本类中存在多个同名方法,但参数类型/个数不同,当传不同的参数时调用不同的方法			发生在本类内部 
 * PHP中,不允许存在多个同名方法. 因此,不能够完成java,c++中的这种重载;但是,PHP的灵活,可以模拟达到类似的效果 
*/

class human{
	  public function say($name){
			echo $name,' 吃了吗?
'; } } class stu extends human{ /* * 报错:Fatal error: Cannot redeclare stu::say() in D:\wamp\www\php\61.php on line 28,因为在PHP中,不允许存在多个同名方法,没有重载概念这一说。 * public function say($a,$b,$c){ * echo '哥仨好'; * } */ public function say(){ echo '切克闹,卡猫百比
'; } } $li=new stu(); $li->say();//结果:切克闹,卡猫百比; $li->say('binghui');//结果:切克闹,卡猫百比;上面这个过程叫重写 //在PHP中模拟重载的方法 class Calc { public function area() { //判断一个调用area时,得到的参数个数 $args = func_get_args();//获取参数个数 if(count($args) == 1) { return 3.14 * $args[0] * $args[0]; } else if(count($args) == 2) { return $args[0] * $args[1]; } else { return '未知图形'; } } } $calc = new Calc(); //计算圆的页面 echo $calc->area(10),'
'; //计算矩形的面积 echo $calc->area(5,8); ?>

';
}
 
test(); //结果:6
test(); //结果:7
test(); //结果:8
echo $var;//Notice:Undefined variable: var 即:不能在函数外部使用静态局部变量,获取不到值


/**
 	类中的static静态属性和方法用什么作用?
 
	(1)无论你实例化了多少个对象,static定义的属性和方法,都只有一个,只占有一次内存,节省了系统的内存开销
	
	(2)访问static属性和方法时,只能用::访问

	(3)静态成员是一种类变量,可以把它看成时属于整个类而不是属于类的某个实例。

	   与一般的实例变量不同的是,静态成员只保留一个变量值,而这个变量值对所有的实例都是有效的

	   也就是说,所有的实例共享这个成员

	(4)$this只表示类的当前实例,
	 
	   self::表示的是类本身,在类之外的代码中不能使用这个操作符,而且它不能识别自己在继承树层次结构中的位置。

	   也就是说,在扩展类中使用self作用域时,self可以调用基类中声明的方法,但它调用的总是已经在扩展类中重写的方法。

	   与$this不同的是,在使用静态变量时,必须在作用域限定符后面加上$符号

	   如:
			$this->name;//调用非静态属性

			self::$name;//调用静态属性

	(5)扩展类中,在基类的方法被重写的情况下,使用 parent 作用域调用定义在基类中的方法。
	  
	   静态成员也可以只属于父类。如果在子类和父类中同时声明了某个成员,也可以使用parant::在子类中访问父类中的变量。
	   
	   在这种情况下,父类的静态成员和子类的静态成员保存的是不同的值
	 
	(6)可以在::操作符的左边写上类的名称来静态地访问某个成员,这样避免创建类的实例.
	
	   不仅可以省略掉实例化类的代码,而且还会更高效,因为类的每个实例都会占用一小部分的系统资源
	
	(7)案例:

		";//结果:1
			$visits2 = new visitors();
			echo visitors::getVisitors()."
";//结果:2 ?> 因为$visitors字段声明为static,所以对其值的任何改变都会反映到所有实例化对象中。 还要注意,静态字段和方法应使用self关键字和类名来引用,而不是通过this和箭头操作符。 这是因为使用“正常”方法引用静态字段是不可能的,会导致语法错误。 不能在类中使用$this来引用为static字段 (8)静态方法: 静态方法和非静态方法之间有一个重要的区别:在调用静态方法时,不再需要拥有类的实例。 静态方法和非静态方法使用原则: (1)、是如果某个方法中不包含$this变量,就应该时静态方法; (2)、如果不需要类的实例,可能还应该使用静态类,这样可以免去实例化类的工作。 (3)、在静态方法中时不能使用$this变量的,因为静态方法不属于某个特定的实例。 */ ?>

第67题:session机制:


     *
     */


    //【session.save_handler = user】:用户自定义session处理机制
    $SESS_DBHOST = "127.0.0.1";  
    $SESS_DBNAME = "cms";   
    $SESS_DBUSER = "root";  
    $SESS_DBPASS = "";   
  
    $SESS_DBH = ""; //数据库连接句柄  
    $SESS_LIFE = get_cfg_var("session.gc_maxlifetime");//默认:8M
  
    //SESSION初始化的时候调用
    function sess_open($save_path, $session_name) {   
        global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;   

        if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {   
            echo "
  • Can't connect to $SESS_DBHOST as $SESS_DBUSER"; echo "
  • MySQL Error: " . mysql_error(); die; } if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) { echo "
  • Unable to select database $SESS_DBNAME"; die; } return true; } //关闭的时候调用 function sess_close() { return true; } function sess_read($key) { global $SESS_DBH, $SESS_LIFE; $qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry > " . time(); $qid = mysql_query($qry, $SESS_DBH); if (list($value) = mysql_fetch_row($qid)) { return $value; } return false; } //脚本执行结束之前,执行写入操作 function sess_write($key, $val) { global $SESS_DBH, $SESS_LIFE; $expiry = time() + $SESS_LIFE; //过期时间 $value = addslashes($val); $qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')"; $qid = mysql_query($qry, $SESS_DBH); if (! $qid) { $qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time(); $qid = mysql_query($qry, $SESS_DBH); } return $qid; } function sess_destroy($key) { global $SESS_DBH; $qry = "DELETE FROM session_tbl WHERE sesskey = '$key'"; $qid = mysql_query($qry, $SESS_DBH); return $qid; } function sess_gc($maxlifetime) { global $SESS_DBH; $qry = "DELETE FROM session_tbl WHERE expiry < " . time(); $qid = mysql_query($qry, $SESS_DBH); return mysql_affected_rows($SESS_DBH); } //【session.save_handler = user】:用户自定义session处理机制主要是通过session_set_save_handler()来进行协调执行 //【执行此函数将修改session默认的存储介质;修改是隐式的,所以不会体现在php.ini配置文件中的session.save_handler配置项】 session_set_save_handler( "sess_open", //可以进行重写 "sess_close", //可以进行重写 "sess_read", //可以进行重写 "sess_write", //可以进行重写 "sess_destroy", //可以进行重写 "sess_gc" //可以进行重写 ); session_start(); //除了以上被重写的session函数外,其它的session函数还是想以前一样调用 ?>

  • 第68题:PHP 的垃圾回收机制:

    PHP垃圾回收机制是php5之后才有的这个东西,下面我来给大家介绍一下关于PHP垃圾回收机制一些理解,希望对各位同学有所帮助。
    
    php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器 1;当变量引用撤掉后,计数器-1;当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。
    
    “引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露;
    
    php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露


    第69题:将外网图片本地化、将外网图片下载到本地的原理


    第70题:PHP缓存技术总结

    value方式;
         $memcachehost = '192.168.6.191';
         $memcacheport = 11211;
         $memcachelife = 60;
         $memcache = new Memcache;
         $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
         $memcache->set('key','缓存的内容');
         $get = $memcache->get($key);       //获取信息
    
    
    7、apache缓存模块
    apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设
    置,当然前提是在安装apache的时候要激活mod_cache的模块。
    安装apache时:./configure --enable-cache --enable-disk-cache --enable-mem-cache
    
    
    8、php APC缓存扩展
    Php有一个APC缓存扩展,windows下面为php_apc.dll,需要先加载这个模块,然后是在php.ini里面进行配置:
    [apc] 
         extension=php_apc.dll 
         apc.rfc1867 = on 
         upload_max_filesize = 100M 
         post_max_size = 100M 
         apc.max_file_size = 200M 
         upload_max_filesize = 1000M 
         post_max_size = 1000M 
         max_execution_time = 600 ;   每个PHP页面运行的最大时间值(秒),默认30秒 
         max_input_time = 600 ;       每个PHP页面接收数据所需的最大时间,默认60 
         memory_limit = 128M ;       每个PHP页面所吃掉的最大内存,默认8M
    
    
    9、Opcode缓存
    我们知道,php的执行流程可以用下图来展示:
    php的执行流程
    首先php代码被解析为Tokens,然后再编译为Opcode码,最后执行Opcode码,返回结果;所以,对于相同的php文件,第一次运行
    时可以缓存其Opcode码,下次再执行这个页面时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了。
    比较知名的是XCache、Turck MM Cache、PHP Accelerator等;
    
    **/
    
    ?>

    第71题:xml文档中的CDATA

    ",也不允许嵌套的CDATA部分;标记CDATA 部分结尾的 "]]>" 不能包含空格或折行
     *		4、CDATA 部分由 "" 结束,CDATA 部分中的所有内容都会被解析器忽略
     *		5、在 XML 元素中,"<" 和 "&" 是非法的; "<" 会产生错误,因为解析器会把该字符解释为新元素的开始;"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始
    		
    		案例:
    		
    			优酷网
    			www.youku.com
    			...
    			...
    			
    				
    					<![CDATA[ 唱说天下:银幕上“不搭配”的情侣档 ]]>
    				
    				
    					
    				
    				
    					
    				
    				
    					
    				
    				
    					
    				
    				
    					
    				
    				
    					
    				
    				
    					
    				
    				
    					
    				
    				
    					
    				
    			
    		
     *
     */
    ?>

    第72题:如何列出目录下的所有模板文件?遍历文件夹、遍历文件、遍历目录及子目录、遍历文件夹及子文件夹

     E:/wamp/www/phpcms/phpcms/templates/default/content/category.html
        [1] => E:/wamp/www/phpcms/phpcms/templates/default/content/category_download.html
        [2] => E:/wamp/www/phpcms/phpcms/templates/default/content/category_picture.html
        [3] => E:/wamp/www/phpcms/phpcms/templates/default/content/category_video.html
        [4] => E:/wamp/www/phpcms/phpcms/templates/default/content/download.html
        [5] => E:/wamp/www/phpcms/phpcms/templates/default/content/footer.html
        [6] => E:/wamp/www/phpcms/phpcms/templates/default/content/header.html
        [7] => E:/wamp/www/phpcms/phpcms/templates/default/content/header_min.html
        [8] => E:/wamp/www/phpcms/phpcms/templates/default/content/header_page.html
        [9] => E:/wamp/www/phpcms/phpcms/templates/default/content/index.html
        [10] => E:/wamp/www/phpcms/phpcms/templates/default/content/list.html
        [11] => E:/wamp/www/phpcms/phpcms/templates/default/content/list_download.html
        [12] => E:/wamp/www/phpcms/phpcms/templates/default/content/list_picture.html
        [13] => E:/wamp/www/phpcms/phpcms/templates/default/content/list_video.html
        [14] => E:/wamp/www/phpcms/phpcms/templates/default/content/message.html
        [15] => E:/wamp/www/phpcms/phpcms/templates/default/content/page.html
        [16] => E:/wamp/www/phpcms/phpcms/templates/default/content/play_list.html
        [17] => E:/wamp/www/phpcms/phpcms/templates/default/content/rss.html
        [18] => E:/wamp/www/phpcms/phpcms/templates/default/content/search.html
        [19] => E:/wamp/www/phpcms/phpcms/templates/default/content/show.html
        [20] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_download.html
        [21] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_picture.html
        [22] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_video.html
        [23] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_videolist.html
        [24] => E:/wamp/www/phpcms/phpcms/templates/default/content/tag.html
        [25] => E:/wamp/www/phpcms/phpcms/templates/default/content/tag_list.html
        [26] => E:/wamp/www/phpcms/phpcms/templates/default/content/video_album.html
        [27] => E:/wamp/www/phpcms/phpcms/templates/default/content/video_for_ck.html
    )
     */
    echo "
    ";
    print_r(glob('E:/wamp/www/phpcms/phpcms/templates/default/content/*.html'));
    //print_r(glob('E:/wamp/www/phpcms/phpcms/templates/default/content/video_*.html'));
    
    
    /**
     *	Array
    (
        [0] => category.html
        [1] => category_download.html
        [2] => category_picture.html
        [3] => category_video.html
        [4] => download.html
        [5] => footer.html
        [6] => header.html
        [7] => header_min.html
        [8] => header_page.html
        [9] => index.html
        [10] => list.html
        [11] => list_download.html
        [12] => list_picture.html
        [13] => list_video.html
        [14] => message.html
        [15] => page.html
        [16] => play_list.html
        [17] => rss.html
        [18] => search.html
        [19] => show.html
        [20] => show_download.html
        [21] => show_picture.html
        [22] => show_video.html
        [23] => show_videolist.html
        [24] => tag.html
        [25] => tag_list.html
        [26] => video_album.html
        [27] => video_for_ck.html
    )
     */
    echo "
    ";
    print_r(@array_map('basename',glob('E:/wamp/www/phpcms/phpcms/templates/default/content/*.html')));//array_map()回调函数
    //print_r(@array_map('basename',glob('E:/wamp/www/phpcms/phpcms/templates/default/content/video_*.html')));//array_map()回调函数
    
    
    ?>

    第74题:遍历函数:scandir()与glob()函数的区别

     .
    				[1] => ..
    				[2] => admin.php
    				[3] => api
    				[4] => api.php
    				[5] => caches
    				[6] => crossdomain.xml
    				[7] => favicon.ico
    				[8] => html
    				[9] => index.html
    				[10] => index.php
    				[11] => js.html
    				[12] => nbproject
    				[13] => phpcms
    				[14] => phpsso_server
    				[15] => plugin.php
    				[16] => robots.txt
    				[17] => statics
    				[18] => uploadfile
    			)
    
    		2、glob('E:/wamp/www/phpcms/*');
    
    			案例:
    
    			Array(
    				[0] => E:/wamp/www/phpcms/admin.php
    				[1] => E:/wamp/www/phpcms/api
    				[2] => E:/wamp/www/phpcms/api.php
    				[3] => E:/wamp/www/phpcms/caches
    				[4] => E:/wamp/www/phpcms/crossdomain.xml
    				[5] => E:/wamp/www/phpcms/favicon.ico
    				[6] => E:/wamp/www/phpcms/html
    				[7] => E:/wamp/www/phpcms/index.html
    				[8] => E:/wamp/www/phpcms/index.php
    				[9] => E:/wamp/www/phpcms/js.html
    				[10] => E:/wamp/www/phpcms/nbproject
    				[11] => E:/wamp/www/phpcms/phpcms
    				[12] => E:/wamp/www/phpcms/phpsso_server
    				[13] => E:/wamp/www/phpcms/plugin.php
    				[14] => E:/wamp/www/phpcms/robots.txt
    				[15] => E:/wamp/www/phpcms/statics
    				[16] => E:/wamp/www/phpcms/uploadfile
    			)
     */
    echo "
    ";print_r(scandir('E:/wamp/www/phpcms/'));//跟glob相比多出来两个元素,分别是: "." 和 ".."
    echo "
    ";print_r(glob('E:/wamp/www/phpcms/*'));//以数组的形式返回与指定模式相匹配的文件名或目录
    ?>

    第75题:var_export()函数用法:

     1
    		[template_list] => default
    		[page_template] => page
    		[meta_title] => 
    		[meta_keywords] => 
    		[meta_description] => 
    		[category_ruleid] => 1
    		[show_ruleid] => 
    		[repeatchargedays] => 1
    	)
    
    */
    function string2array($data) {
    	if($data == '') return array();
    	@eval("\$array = $data;");
    	return $array;
    }
    
    $data='array (
      \'ishtml\' => \'1\',
      \'template_list\' => \'default\',
      \'page_template\' => \'page\',
      \'meta_title\' => \'\',
      \'meta_keywords\' => \'\',
      \'meta_description\' => \'\',
      \'category_ruleid\' => \'1\',
      \'show_ruleid\' => \'\',
      \'repeatchargedays\' => \'1\',
    )';
    
    echo "
    ";print_r(string2array($data));
    
    
    
    
    $arr=array(
    	'username'=>'admin',
    	'password'=>'123'
    );
    
    /**
     *	var_export()函数:返回字符串
     */
    
    $str=var_export($arr,true);//返回的是合法的php代码,是一个字符串,不是数组
    
    /**
     *	结果:数组格式的字符串
    
    		array (
    		  'username' => 'admin',
    		  'password' => '123',
    		)
     */
    echo $str;//正确
    //echo $str['username'];//错误,因为此时$str是一个数组格式的字符串,不是数组
    
    @eval("\$str = $str;");//将数组格式的字符串转换为数组
    print_r($str['username']);//结果:'admin',此时已将数组格式的字符串转化为数组
    
    ?>
    目录:
    51、php中如何统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数
    52、php中如何统计字符串中每种字符的出现次数并排序?
    53、php中使用str_word_count()函数计算字符串中的单词数?
    56、php中redis与memcached区别?
    57、php中memcached的使用案例?
    58、php中文件缓存的使用案例?
    59、php中redis使用案例?
    60、php如何读取php.ini配置文件中的配置选项的值?
    61、php中如何动态的调用一个函数?
    62、php中__call魔术方法的使用
    63、php中如何解析php.ini配置文件?
    65、php中的重写与重载的区别?
    66、php中static静态局部变量(不是数组)在函数中的使用
    67、php中session的内部机制实现原理
    68、php中的垃圾回收机制
    69、php如何将外网图片本地化或将外网图片下载到本地的原理?
    70、php中缓存技术总结
    71、php中xml文档的CDATA理解
    72、php中如何列出目录下的所有模板文件?遍历文件夹、遍历文件、遍历目录及子目录、遍历文件夹及子文件夹
    74、php中遍历函数:scandir()与glob()函数的区别?
    75、php中通过var_export()函数返回数组格式的字符串

     
      

    你可能感兴趣的:(【php面试题汇总】)