分类目录归档:PHP

macOS Sierra系统下PHP5.6安装memcached扩展

一、下载扩展包及依赖

libmemcached下载地址
https://launchpad.net/libmemcached/+download

php-memcached下载地址 (PHP5.6选择2.2.0版本,PHP7选择3.X版本)
http://pecl.php.net/package/memcached

二、安装libmemcached依赖

mkdir -p /usr/local/libmemcached
tar zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached --with-memcached
make && make install

继续阅读

如何识别微信内置浏览器访问(识别扫一扫来源)

最近给公司做App统一扫描下载入口时,遇到一个问题,安卓版微信会屏蔽apk的下载,于是在扫码时,需判断是否是微信扫码,下面提供PHP和Js两种判断方法:

 

JavaScript版本判断

function is_weixn(){
  var ua = navigator.userAgent.toLowerCase();
  if(ua.match(/MicroMessenger/i)=="micromessenger") {
    return true;
  } else {
    return false;
  }
}

 

PHP判断

function isWeixin(){
  $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
  $is_weixin = strpos($agent, 'micromessenger') ? true : false ;
  return $is_weixin;
}

 

PHP的匿名函数及闭包

匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。

匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数。

继续阅读

去除php数组中,重复的值

一维数组的重复项

      使用array_unique函数即可,使用实例如下:

              <?php
                  $aa=array(“chengxusheji”,”banana”,”pear”,”chengxusheji”,”wail”,”watermalon”);
                  $bb=array_unique($aa);
                  print_r($bb);
               ?>

      结果如下:Array ( [0] => chengxusheji [1] => banana [2] => pear [4] => wail [5] => watermalon ) 。

二维数组的重复项

     对于二维数组咱们分两种情况讨论,一种是因为某一键名的值不能重复,删除重复项;另一种因为内部的一维数组不能完全相同,而删除重复项,下面举例说明:

           ㈠因为某一键名的值不能重复,删除重复项

          <?php
           function assoc_unique($arr, $key)
            {
              $tmp_arr = array();
              foreach($arr as $k => $v)
             {
                if(in_array($v[$key], $tmp_arr))//搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true
               {
                  unset($arr[$k]);
               }
             else {
                 $tmp_arr[] = $v[$key];
               }
             }
           sort($arr); //sort函数对数组进行排序
           return $arr;
           }

           $aa = array(
           array(‘id’ => 123, ‘name’ => ‘张三’),
           array(‘id’ => 123, ‘name’ => ‘李四’),
           array(‘id’ => 124, ‘name’ => ‘王五’),
           array(‘id’ => 125, ‘name’ => ‘赵六’),
           array(‘id’ => 126, ‘name’ => ‘赵六’)
           );
           $key = ‘id’;
           assoc_unique(&$aa, $key);
           print_r($aa);
           ?>

     显示结果为:Array ( [0] => Array ( [id] => 123 [name] => 张三 ) [1] => Array ( [id] => 124 [name] => 王五 ) [2] => Array ( [id] => 125 [name] => 赵六 ) [3] => Array ( [id] => 126 [name] => 赵六 ) )

       ㈡因内部的一维数组不能完全相同,而删除重复项

           <?php
           function array_unique_fb($array2D){
                foreach ($array2D as $v){
                    $v = join(“,”,$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
                    $temp[] = $v;
                }
                $temp = array_unique($temp);    //去掉重复的字符串,也就是重复的一维数组
               foreach ($temp as $k => $v){
                   $temp[$k] = explode(“,”,$v);   //再将拆开的数组重新组装
               }
               return $temp;
           }

           $aa = array(
           array(‘id’ => 123, ‘name’ => ‘张三’),
           array(‘id’ => 123, ‘name’ => ‘李四’),
           array(‘id’ => 124, ‘name’ => ‘王五’),
           array(‘id’ => 123, ‘name’ => ‘李四’),
           array(‘id’ => 126, ‘name’ => ‘赵六’)
           );
           $bb=array_unique_fb($aa);
           print_r($bb)
           ?>

         显示结果:Array ( [0] => Array ( [0] => 123 [1] => 张三 ) [1] => Array ( [0] => 123 [1] => 李四 ) [2] => Array ( [0] => 124 [1] => 王五 ) [4] => Array ( [0] => 126 [1] => 赵六 ) ) 

PHP计算任意两个日期之间的天数

PHP面试题中,关于日期的题目作为基础考题经常出现,下面讨论一下获取两个日期之间的天数的方法。

收到一个答案,拆分年、月、日,分别进行减法,然后统计天数,好累。

针对低版本的PHP可以用下面的方式搞定:

 

$date1 = '2014-02-18 00:09:13';
	$date2 = '2014-03-19 00:02:18';

	function differDays($date1, $date2) {

		$differNums = strtotime($date2) - strtotime($date1);

		$differNums = $differNums / (3600 * 24);

		echo floor(abs($differNums));

	}

	echo differDays($date1, $date2);

	echo "\n";
//或者
	function difDays($date1,$date2){ 

		$date1 = substr($date1, 0, 10);
		$date2 = substr($date2, 0, 10);

		$time1 = explode("-", $date1); 
		$time2 = explode("-", $date2); 

		$date1 = mktime(0, 0, 0, $time1[1],$time1[2],$time1[0]); 
		$date2 = mktime(0, 0, 0, $time2[1],$time2[2],$time2[0]);

		return ($date2 - $date1)/(3600*24) - 1; 
	}

	echo difDays($date1, $date2);

PHP5.3以上版本可以使用date_diff:

 

function dateDiff($date1, $date2) {
		$datetime1 = new DateTime($date1);
		$datetime2 = new DateTime($date2);
		$interval = $datetime1->diff($datetime2);
		return $interval->format('%a');
	}

	echo dateDiff($date1, $date2);

 

本文例子下载:http://pan.baidu.com/s/1eQ1Nn14

 

随机取出一维数组中的N个元素 PHP

<?php

	$testArr = range(a, z);

	#######  the first method  

	$newArr = arrayRand($testArr);

	var_dump($newArr);

	function arrayRand($arr, $num = 3) {
		$arr1 = array_rand($arr, $num);

		$newArr = array();

		foreach ($arr1 as $key => $value) {
			$newArr[] = $arr[$value];
		}

		return $newArr;
	}
	echo "\n";


	######  the second method

	$arr2 = arrayRandom($testArr);

	var_dump($arr2);



	function arrayRandom($arr, $num = 3) {
		shuffle($arr);

		// list($a, $b, $c) = $arr;

		$newArr = array();

		for ($i = 0; $i < $num; $i++) {
			$newArr[] = $arr[$i];
		}

		return $newArr;
	}



	###### the third method    getting random value from assoc arrays

	$testArr = array(
		'a' => 'siyuantlw',
		'b' => 'chengxusheji',
		'c' => 'redisfans',
		'd' => 'phpzl',
		'e' => 'yemiansheji'
	);

	echo "\n";

	$newArr = assocArrayRandom($testArr);

	var_dump($newArr);

	function assocArrayRandom($arr, $num = 2) {
		$keyArr = array_keys($arr);

		shuffle($keyArr);

		$newArr = array();

		for ($i = 0; $i < $num; $i++) {
			$newArr[$keyArr[$i]] = $arr[$keyArr[$i]];
		}

		return $newArr;
	}

?>

PHP SimpleXML 函数

PHP SimpleXML 简介

SimpleXML 函数允许您把 XML 转换为对象。

通过普通的属性选择器或数组迭代器,可以处理这个对象,就像处理任何其他对象一样。

其中的一些函数需要最新的 PHP 版本。

安装

SimpleXML 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。

PHP SimpleXML 函数

PHP:指示支持该函数的最早的 PHP 版本。

函数 描述 PHP
__construct() 创建一个新的 SimpleXMLElement 对象。 5
addAttribute() 给 SimpleXML 元素添加一个属性。 5
addChild() 给 SimpleXML 元素添加一个子元素。 5
asXML() 从 SimpleXML 元素获取 XML 字符串。 5
attributes() 获取 SimpleXML 元素的属性。 5
children() 获取指定节点的子。 5
getDocNamespaces() 获取 XML 文档的命名空间。 5
getName() 获取 SimpleXML 元素的名称。 5
getNamespaces() 从 XML 数据获取命名空间。 5
registerXPathNamespace() 为下一次 XPath 查询创建命名空间语境。 5
simplexml_import_dom() 从 DOM 节点获取 SimpleXMLElement 对象。 5
simplexml_load_file() 从 XML 文档获取 SimpleXMLElement 对象。 5
simplexml_load_string() 从 XML 字符串获取 SimpleXMLElement 对象。 5
xpath() 对 XML 数据运行 XPath 查询。 5