PHP判断键名是否存在的方法

回复

PHP匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 131 次浏览 • 2016-11-17 00:08 • 来自相关话题

PHP自定义异常处理函数

PHPlinyu520 发表了文章 • 0 个评论 • 136 次浏览 • 2016-11-16 13:56 • 来自相关话题

  我们常需要根据项目的不同,对代码运行日志记录有不同的需求。这不同的需求包含,需要记录的内容不同、记录的格式不同、日志的输出方式(写如文件、发EMail、发短信等)不同。这时,我们可以将自己的日志记录需求实现方法定义到一个类中,然后再通过下面这些函数,将类的方法注册到对应的事件,这样当事件发生时,系统自定会按我们的需求将日志记录到指定的地方。

一、register_shutdown_function函数:
  register_shutdown_function()函数用来设置当PHP脚本执行完成、或者exit()退出时要调用的函数。register_shutdown_function(array('Err','shutdown_function'));  
二、set_error_handler函数:
  set_error_handler函数使用来设置脚本发生错误时调用的函数,用法如下:set_error_handler(array('Err','error_handler'));通过 set_error_handler() 函数设置用户自定义的错误处理程序,然后触发错误(通过 trigger_error()):

三、set_exception_handler函数:set_exception_handler(array('Err','appException'));
简单示例:<?php
date_default_timezone_set('PRC');
register_shutdown_function(array('Err','successHandle'));
set_error_handler(array('Err','errorHandler'));
set_exception_handler(array('Err','exceptionHandle'));
class Err {
private static $logFile = 'log.txt';
//脚本发生错误
public static function errorHandler($errno, $errstr, $errfile, $errline){
$msg = sprintf("Error: %s %s %s:%s", $errno, $errstr, $errfile, $errline);
self::writeLog($msg);
}

//脚本执行完成
public static function successHandle() {
self::writeLog("Success.");
}

//脚本抛出异常
public static function exceptionHandle($exception) {
$msg = sprintf("Exception: %s", $exception->getMessage());
self::writeLog($msg);
}

//写日志
private static function writeLog( $msg ) {
$msg = sprintf("%s %s\t%s\n", date('Y-m-d H:i:s'), $_SERVER['REMOTE_ADDR'], $msg);
file_put_contents(self::$logFile, $msg, FILE_APPEND);
}
}

throw new Exception("发生异常啦"); 查看全部
  我们常需要根据项目的不同,对代码运行日志记录有不同的需求。这不同的需求包含,需要记录的内容不同、记录的格式不同、日志的输出方式(写如文件、发EMail、发短信等)不同。这时,我们可以将自己的日志记录需求实现方法定义到一个类中,然后再通过下面这些函数,将类的方法注册到对应的事件,这样当事件发生时,系统自定会按我们的需求将日志记录到指定的地方。

一、register_shutdown_function函数:
  register_shutdown_function()函数用来设置当PHP脚本执行完成、或者exit()退出时要调用的函数。
register_shutdown_function(array('Err','shutdown_function'));
  
二、set_error_handler函数:
  set_error_handler函数使用来设置脚本发生错误时调用的函数,用法如下:
set_error_handler(array('Err','error_handler'));
通过 set_error_handler() 函数设置用户自定义的错误处理程序,然后触发错误(通过 trigger_error()):

三、set_exception_handler函数:
set_exception_handler(array('Err','appException'));

简单示例:
<?php
date_default_timezone_set('PRC');
register_shutdown_function(array('Err','successHandle'));
set_error_handler(array('Err','errorHandler'));
set_exception_handler(array('Err','exceptionHandle'));
class Err {
private static $logFile = 'log.txt';
//脚本发生错误
public static function errorHandler($errno, $errstr, $errfile, $errline){
$msg = sprintf("Error: %s %s %s:%s", $errno, $errstr, $errfile, $errline);
self::writeLog($msg);
}

//脚本执行完成
public static function successHandle() {
self::writeLog("Success.");
}

//脚本抛出异常
public static function exceptionHandle($exception) {
$msg = sprintf("Exception: %s", $exception->getMessage());
self::writeLog($msg);
}

//写日志
private static function writeLog( $msg ) {
$msg = sprintf("%s %s\t%s\n", date('Y-m-d H:i:s'), $_SERVER['REMOTE_ADDR'], $msg);
file_put_contents(self::$logFile, $msg, FILE_APPEND);
}
}

throw new Exception("发生异常啦");

PHP fwrite 与 file_put_contents 两个函数的区别

PHPlinyu520 发表了文章 • 0 个评论 • 188 次浏览 • 2016-11-16 11:00 • 来自相关话题

一、fwrite函数和file_put_contents函数的区别:
  fwrite()函数和file_put_contents()函数都是将字符串写入到文件,但它们又有一定区别,具体如下表:函数名功能简介fwrite()将字符串写入或追加到文件中;
写入文件前,需使用fopen()函数打开文件,
写入文件后,需使用fclose()函数关闭文件。file_put_contents()将字符串写入或追加到文件中;
函数会自动执行打开文件、写入文件、关闭文件操作。 
二、写入文件演示:
1、使用fwrite函数将字符串写入文件:<?php
//以从文件头开始写入的方式打开文件,会覆盖文件原有的内容
$handle = fopen('a.txt', 'w');
$num = fwrite($handle, "爱E族\n");
fclose($handle);
echo $num; //输出:8(汉字为3字节,E和换行符各一个字节) 
2、使用file_put_contents函数将字符串写入到文件:<?php
$num = file_put_contents('b.txt', "爱E族\n");
echo $num; // 输出:8 
三、追加文件演示:
1、使用fwrite函数追加文件:<?php
//以追加的方式打开文件,将文件尾部开始写入,不会覆盖原有内容
$handle = fopen('a.txt', 'a');
$num = fwrite($handle, "Aiezu.com\n");
fclose($handle);
echo $num; //输出:10 
2、使用file_put_contents函数追加文件:<?php
// LOCK_EX: 写文件的时候先锁定,防止多人同时写入造成内容丢失
$num = file_put_contents('b.txt', "Aiezu.com\n", FILE_APPEND|LOCK_EX);
echo $num; // 输出:10 
四、性能比较:
1、写入性能比较:<?php
$num = 1000;

$start = microtime(true);
for($i=1; $i<=$num; $i++) {
file_put_contents('b.txt', "Aiezu.com\n");
}
$time = microtime(true)-$start;
echo sprintf("file_put_contents函数写入%d次耗时%.3f秒\n", $num, $time);


$start = microtime(true);
for($i=1; $i<=$num; $i++) {
$handle = fopen('a.txt', "w");
fwrite($handle, "Aiezu.com\n");
fclose($handle);
}
$time = microtime(true)-$start;
echo sprintf("fwrite函数写入%d次耗时%.3f秒\n", $num, $time);输出:file_put_contents函数写入1000次耗时0.994秒
fwrite函数写入1000次耗时1.108秒
本例可以看出,对于覆写文件内容,file_put_contents函数会比fwrite函数稍快。
2、追加内容性能比较:<?php
$num = 100000;

$start = microtime(true);
for($i=1; $i<=$num; $i++) {
file_put_contents('a.txt', "爱E族", FILE_APPEND);
}
$time = microtime(true)-$start;
echo sprintf("file_put_contents函数追加内容%d次耗时%.3f秒\n", $num, $time);

$start = microtime(true);
for($i=1; $i<=$num; $i++) {
$handle = fopen('b.txt', "a");
fwrite($handle, "爱E族");
fclose($handle);
}
$time = microtime(true)-$start;
echo sprintf("fwrite一次打开追加内容一次,重复%d次耗时%.3f秒\n", $num, $time);

$start = microtime(true);
$handle = fopen('c.txt', "a");
for($i=1; $i<=$num; $i++) {
fwrite($handle, "爱E族");
}
fclose($handle);
$time = microtime(true)-$start;
echo sprintf("fwrite一次打开,追加内容%d次耗时%.3f秒\n", $num, $time);输出:file_put_contents函数追加内容100000次耗时0.765秒
fwrite一次打开追加内容一次,重复100000次耗时0.580秒
fwrite一次打开,追加内容100000次耗时0.112秒  本例可以看出,对于追加文件内容来说,fwrite函数比file_put_contents函数快很多,如果是fwrite一次打开写入多次,那更是快很多倍。
  通过上面两例,发现更令人惊奇的一点,两个函数的追加内容比覆写内容,快近百倍,这是为什么呢?大家可以亲自测一下。
 
五、总结:
  写入少量内容,单次写入,我们建议使用file_put_contents函数、一行代码,简单方便,性能也不错。对于连续写入多次,或者写入大块内容,建议使用fwrite函数配合其他函数,使用二进制流的方式,边读边写,减少内存占用。 查看全部
一、fwrite函数和file_put_contents函数的区别:
  fwrite()函数和file_put_contents()函数都是将字符串写入到文件,但它们又有一定区别,具体如下表:
函数名功能简介
fwrite()将字符串写入或追加到文件中;
写入文件前,需使用fopen()函数打开文件,
写入文件后,需使用fclose()函数关闭文件。
file_put_contents()将字符串写入或追加到文件中;
函数会自动执行打开文件、写入文件、关闭文件操作。
 
二、写入文件演示:
1、使用fwrite函数将字符串写入文件:
<?php
//以从文件头开始写入的方式打开文件,会覆盖文件原有的内容
$handle = fopen('a.txt', 'w');
$num = fwrite($handle, "爱E族\n");
fclose($handle);
echo $num; //输出:8(汉字为3字节,E和换行符各一个字节)
 
2、使用file_put_contents函数将字符串写入到文件:
<?php
$num = file_put_contents('b.txt', "爱E族\n");
echo $num; // 输出:8
 
三、追加文件演示:
1、使用fwrite函数追加文件:
<?php
//以追加的方式打开文件,将文件尾部开始写入,不会覆盖原有内容
$handle = fopen('a.txt', 'a');
$num = fwrite($handle, "Aiezu.com\n");
fclose($handle);
echo $num; //输出:10
 
2、使用file_put_contents函数追加文件:
<?php
// LOCK_EX: 写文件的时候先锁定,防止多人同时写入造成内容丢失
$num = file_put_contents('b.txt', "Aiezu.com\n", FILE_APPEND|LOCK_EX);
echo $num; // 输出:10
 
四、性能比较:
1、写入性能比较:
<?php
$num = 1000;

$start = microtime(true);
for($i=1; $i<=$num; $i++) {
file_put_contents('b.txt', "Aiezu.com\n");
}
$time = microtime(true)-$start;
echo sprintf("file_put_contents函数写入%d次耗时%.3f秒\n", $num, $time);


$start = microtime(true);
for($i=1; $i<=$num; $i++) {
$handle = fopen('a.txt', "w");
fwrite($handle, "Aiezu.com\n");
fclose($handle);
}
$time = microtime(true)-$start;
echo sprintf("fwrite函数写入%d次耗时%.3f秒\n", $num, $time);
输出:
file_put_contents函数写入1000次耗时0.994秒
fwrite函数写入1000次耗时1.108秒

本例可以看出,对于覆写文件内容,file_put_contents函数会比fwrite函数稍快。
2、追加内容性能比较:
<?php
$num = 100000;

$start = microtime(true);
for($i=1; $i<=$num; $i++) {
file_put_contents('a.txt', "爱E族", FILE_APPEND);
}
$time = microtime(true)-$start;
echo sprintf("file_put_contents函数追加内容%d次耗时%.3f秒\n", $num, $time);

$start = microtime(true);
for($i=1; $i<=$num; $i++) {
$handle = fopen('b.txt', "a");
fwrite($handle, "爱E族");
fclose($handle);
}
$time = microtime(true)-$start;
echo sprintf("fwrite一次打开追加内容一次,重复%d次耗时%.3f秒\n", $num, $time);

$start = microtime(true);
$handle = fopen('c.txt', "a");
for($i=1; $i<=$num; $i++) {
fwrite($handle, "爱E族");
}
fclose($handle);
$time = microtime(true)-$start;
echo sprintf("fwrite一次打开,追加内容%d次耗时%.3f秒\n", $num, $time);
输出:
file_put_contents函数追加内容100000次耗时0.765秒
fwrite一次打开追加内容一次,重复100000次耗时0.580秒
fwrite一次打开,追加内容100000次耗时0.112秒
  本例可以看出,对于追加文件内容来说,fwrite函数比file_put_contents函数快很多,如果是fwrite一次打开写入多次,那更是快很多倍。
  通过上面两例,发现更令人惊奇的一点,两个函数的追加内容比覆写内容,快近百倍,这是为什么呢?大家可以亲自测一下。
 
五、总结:
  写入少量内容,单次写入,我们建议使用file_put_contents函数、一行代码,简单方便,性能也不错。对于连续写入多次,或者写入大块内容,建议使用fwrite函数配合其他函数,使用二进制流的方式,边读边写,减少内存占用。

PHP array_udiff_uassoc 函数

PHPllslx520 发表了文章 • 0 个评论 • 185 次浏览 • 2016-11-14 14:25 • 来自相关话题

一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值,对键名和键值的比较都使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键/值对。此函数键值比较和键名比较都使用用户自定义函数。关于计算差集系列函数的区别请参考:PHP数组计算差集系列函数的区别。

二、函数语法:array array_udiff_uassoc($array1 , $array2[, $...], $user_value_compare_func, $user_key_compare_func)
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组;$user_value_compare_func用户自定义回调函数,用来比较键值。如果认为第一个键值小于,等于,或大于第二个键值时必须分别返回一个小于零,等于零,或大于零的整数。只有键名比较返回0,对应的键值才会传递给此自定义函数比较。$user_key_compare_func用户自定义回调函数,用来比较键名。如果认为第一个键名小于,等于,或大于第二个键名时必须分别返回一个小于零,等于零,或大于零的整数。 
四、返回值:返回第一个数组与其他数组的键名/键值对差集组成的数组。
五、用法举例:
1、array_udiff_uassoc 函数工作流程解析:
  大体分为3步:1、每个数组key的排序去重;2、判断第一个数组的key是否与其他数组的key相等,如果相等返回0,然后执行第3步;3、判断第2步相等的key对应的值是否相等,相等返回0,此key和对应的值不会再出现在返回数组中,执行第1步比较下一对key。<?php
function user_key_compare_func($k1, $k2) {
echo sprintf("debug key: %s vs %s %s\n", $k1, $k2, $k1===$k2 ? 0 : ($k1>$k2?1:-1) ); //debug行
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

function user_value_compare_func($v1, $v2) {
echo sprintf("debug value: %s vs %s %s\n", $v1, $v2, $v1===$v2 ? 0 : ($v1>$v2?1:-1) ); //debug行
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);
$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu');

$result = array_udiff_uassoc($arr1, $arr2, "user_value_compare_func", "user_key_compare_func");
print_r($result);输出:debug key: 1 vs 0 1 #$arr1的key排序去重
debug key: b vs 1 -1
debug key: 0 vs b -1 #$arr2的key排序去重
debug key: b vs name -1

debug key: 0 vs b -1 #key不相等
debug key: 0 vs 0 0 #key相等,下步比较key对应的键值
debug value: 爱E族 vs aiezu 1 #key对应的键值不相等,key:0,value:爱E族会出现在返回数组中
debug key: b vs 0 -1
debug key: b vs b 0 #key相等,下步比较key对应的键值
debug value: bb vs bb 0 #key对应的键值也相等,$arr1中键b和对应的键值bb不会出现在返回数组中
debug key: 1 vs 0 1
debug key: 1 vs b 1
debug key: 1 vs name 1
Array
(
[0] => 爱E族
[1] => aiezu
)
2、使用类函数作为键值和键名比较函数,找出三个数组的差集:<?php
class user {
function key_compare($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
function value_compare($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}
}
$arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);
$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu');
$arr3 = array('1'=>'aiezu');
$result = array_udiff_uassoc($arr1, $arr2, $arr3, array("user", "value_compare"), array("user", "key_compare"));
print_r($result);输出:Array
(
[0] => 爱E族
) 查看全部
一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值,对键名和键值的比较都使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键/值对。此函数键值比较和键名比较都使用用户自定义函数。关于计算差集系列函数的区别请参考:PHP数组计算差集系列函数的区别

二、函数语法:
array array_udiff_uassoc($array1 , $array2[, $...], $user_value_compare_func, $user_key_compare_func)

三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组;
$user_value_compare_func用户自定义回调函数,用来比较键值。如果认为第一个键值小于,等于,或大于第二个键值时必须分别返回一个小于零,等于零,或大于零的整数。只有键名比较返回0,对应的键值才会传递给此自定义函数比较。
$user_key_compare_func用户自定义回调函数,用来比较键名。如果认为第一个键名小于,等于,或大于第二个键名时必须分别返回一个小于零,等于零,或大于零的整数。
 
四、返回值:
返回第一个数组与其他数组的键名/键值对差集组成的数组。

五、用法举例:
1、array_udiff_uassoc 函数工作流程解析:
  大体分为3步:1、每个数组key的排序去重;2、判断第一个数组的key是否与其他数组的key相等,如果相等返回0,然后执行第3步;3、判断第2步相等的key对应的值是否相等,相等返回0,此key和对应的值不会再出现在返回数组中,执行第1步比较下一对key。
<?php
function user_key_compare_func($k1, $k2) {
echo sprintf("debug key: %s vs %s %s\n", $k1, $k2, $k1===$k2 ? 0 : ($k1>$k2?1:-1) ); //debug行
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

function user_value_compare_func($v1, $v2) {
echo sprintf("debug value: %s vs %s %s\n", $v1, $v2, $v1===$v2 ? 0 : ($v1>$v2?1:-1) ); //debug行
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);
$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu');

$result = array_udiff_uassoc($arr1, $arr2, "user_value_compare_func", "user_key_compare_func");
print_r($result);
输出:
debug   key: 1 vs 0 1  #$arr1的key排序去重
debug key: b vs 1 -1
debug key: 0 vs b -1 #$arr2的key排序去重
debug key: b vs name -1

debug key: 0 vs b -1 #key不相等
debug key: 0 vs 0 0 #key相等,下步比较key对应的键值
debug value: 爱E族 vs aiezu 1 #key对应的键值不相等,key:0,value:爱E族会出现在返回数组中
debug key: b vs 0 -1
debug key: b vs b 0 #key相等,下步比较key对应的键值
debug value: bb vs bb 0 #key对应的键值也相等,$arr1中键b和对应的键值bb不会出现在返回数组中
debug key: 1 vs 0 1
debug key: 1 vs b 1
debug key: 1 vs name 1
Array
(
[0] => 爱E族
[1] => aiezu
)

2、使用类函数作为键值和键名比较函数,找出三个数组的差集:
<?php
class user {
function key_compare($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
function value_compare($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}
}
$arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);
$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu');
$arr3 = array('1'=>'aiezu');
$result = array_udiff_uassoc($arr1, $arr2, $arr3, array("user", "value_compare"), array("user", "key_compare"));
print_r($result);
输出:
Array
(
[0] => 爱E族
)

PHP array_udiff_assoc 函数

PHPllslx520 发表了文章 • 0 个评论 • 146 次浏览 • 2016-11-14 14:18 • 来自相关话题

一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值,对键值的比较使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键/值对。此函数键值比较使用用户自定义函数,键名比较使用系统默认。关于计算差集系列函数的区别请参考:PHP数组计算差集系列函数的区别。

二、函数语法:array array_udiff_assoc($array1, $array2[, $... ], $user_value_compare_func)
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组;user_value_compare_func用户自定义回调函数,用来比较键值。如果认为第一个键值小于,等于,或大于第二个键值时必须分别返回一个小于零,等于零,或大于零的整数。 
四、返回值:返回第一个数组与其他数组的键名/键值对差集组成的数组。
五、用法举例:
1、array_udiff_assoc 的自定义函数工作流程:<?php
function user_value_compare_func($v1, $v2) {
echo sprintf("debug: value %s %s %s\n", $v1, $v2, $v1===$v2 ? 0 : ($v1>$v2?1:-1) ); //debug行
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);
$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu');
$result = array_udiff_assoc($arr1, $arr2, "user_value_compare_func");
print_r($result);输出:debug: value 爱E族 aiezu 1 #键名相等但键值不相等,“爱E族”会出现在返回结果中。
debug: value bb bb 0 #键名相等且键值也相等,,“bb”不会出现在返回结果中。
Array
(
[0] => 爱E族
[1] => aiezu #键名不相等,不会提交给user_value_compare_func函数比较键值

2、使用类函数作为键值比较函数,找出三个数组的差集:<?php
class user {
function value_compare($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}
}
$arr1 = array('usage', 'aiezu', '爱E族', 'com');
$arr2 = array('com', '2'=>'爱E族');
$arr3 = array('usage');
$result = array_udiff_assoc($arr1, $arr2, $arr3, array("user", "value_compare"));
print_r($result);输出:Array
(
[1] => aiezu
[3] => com
) 查看全部
一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值,对键值的比较使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键/值对。此函数键值比较使用用户自定义函数,键名比较使用系统默认。关于计算差集系列函数的区别请参考:PHP数组计算差集系列函数的区别

二、函数语法:
array array_udiff_assoc($array1, $array2[, $... ], $user_value_compare_func)

三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组;
user_value_compare_func用户自定义回调函数,用来比较键值。如果认为第一个键值小于,等于,或大于第二个键值时必须分别返回一个小于零,等于零,或大于零的整数。
 
四、返回值:
返回第一个数组与其他数组的键名/键值对差集组成的数组。

五、用法举例:
1、array_udiff_assoc 的自定义函数工作流程:
<?php
function user_value_compare_func($v1, $v2) {
echo sprintf("debug: value %s %s %s\n", $v1, $v2, $v1===$v2 ? 0 : ($v1>$v2?1:-1) ); //debug行
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);
$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu');
$result = array_udiff_assoc($arr1, $arr2, "user_value_compare_func");
print_r($result);
输出:
debug: value 爱E族 aiezu 1   #键名相等但键值不相等,“爱E族”会出现在返回结果中。
debug: value bb bb 0 #键名相等且键值也相等,,“bb”不会出现在返回结果中。
Array
(
[0] => 爱E族
[1] => aiezu #键名不相等,不会提交给user_value_compare_func函数比较键值
)
 
2、使用类函数作为键值比较函数,找出三个数组的差集:
<?php
class user {
function value_compare($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}
}
$arr1 = array('usage', 'aiezu', '爱E族', 'com');
$arr2 = array('com', '2'=>'爱E族');
$arr3 = array('usage');
$result = array_udiff_assoc($arr1, $arr2, $arr3, array("user", "value_compare"));
print_r($result);
输出:
Array
(
[1] => aiezu
[3] => com
)

PHP array_diff_ukey 函数

PHPllslx520 发表了文章 • 0 个评论 • 141 次浏览 • 2016-11-14 13:59 • 来自相关话题

一、函数功能:
  计算出第一个数组与其他数组的键名差集(只考虑键名,不考虑键值,对键名的比较使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键名,返回键名及其对应的值组成的数组。PHP 5.1开始才支持此函数。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别。
 
二、函数语法:array array_diff_ukey ( $array1, $array2 [, $...], $user_key_compare_func) 
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组;$user_key_compare_func用户自定义回调函数,用来比较键名。如果认为第一个键名小于,等于,或大于第二个键名时必须分别返回一个小于零,等于零,或大于零的整数。 
四、返回值:返回第一个数组中不包含在其他任何数组中的键名及其对应的值组成的数组。
五、用法举例:
1、array_diff_ukey 函数工作流程解析:<?php
function user_key_compare_func($k1, $k2) {
echo sprintf("%s %s %s\n", $k1, $k2, $k1===$k2 ? 0 : ($k1>$k2?1:-1) ); //debug行
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "b"=>2, "d"=>3);
$result = array_diff_ukey($arr1, $arr2, "user_key_compare_func");
print_r($result);输出:b a 1 #数组$arr1键名排序去重
c b 1
b a 1 #数组$arr2键名排序去重
d b 1

a a 0 #键名相等,不会在出现在返回数组中
b a 1
b b 0 #键名相等,不会在出现在返回数组中
c a 1
c b 1
c d -1
Array
(
[c] => 3

2、使用类中的自定义函数比较三个数组。<?php
class user {
function key_compare($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
}
$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "d"=>3);
$arr3 = array('c'=>3);
$result = array_diff_ukey($arr1, $arr2, $arr3, array("user", "key_compare"));
print_r($result);输出:Array
(
<strong> => 2
)</strong> 查看全部
一、函数功能:
  计算出第一个数组与其他数组的键名差集(只考虑键名,不考虑键值,对键名的比较使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键名,返回键名及其对应的值组成的数组。PHP 5.1开始才支持此函数。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别
 
二、函数语法:
array array_diff_ukey ( $array1, $array2 [, $...], $user_key_compare_func)
 
三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组;
$user_key_compare_func用户自定义回调函数,用来比较键名。如果认为第一个键名小于,等于,或大于第二个键名时必须分别返回一个小于零,等于零,或大于零的整数。
 
四、返回值:
返回第一个数组中不包含在其他任何数组中的键名及其对应的值组成的数组。

五、用法举例:
1、array_diff_ukey 函数工作流程解析:
<?php
function user_key_compare_func($k1, $k2) {
echo sprintf("%s %s %s\n", $k1, $k2, $k1===$k2 ? 0 : ($k1>$k2?1:-1) ); //debug行
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "b"=>2, "d"=>3);
$result = array_diff_ukey($arr1, $arr2, "user_key_compare_func");
print_r($result);
输出:
b a 1  #数组$arr1键名排序去重
c b 1
b a 1 #数组$arr2键名排序去重
d b 1

a a 0 #键名相等,不会在出现在返回数组中
b a 1
b b 0 #键名相等,不会在出现在返回数组中
c a 1
c b 1
c d -1
Array
(
[c] => 3
)
 
2、使用类中的自定义函数比较三个数组。
<?php
class user {
function key_compare($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
}
$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "d"=>3);
$arr3 = array('c'=>3);
$result = array_diff_ukey($arr1, $arr2, $arr3, array("user", "key_compare"));
print_r($result);
输出:
Array
(
<strong> => 2
)</strong>

PHP array_diff_key 函数

PHPllslx520 发表了文章 • 0 个评论 • 135 次浏览 • 2016-11-14 13:54 • 来自相关话题

一、函数功能:
  计算出第一个数组与其他数组的键名差集(只考虑键名,不考虑键值)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键名,返回键名及其对应的值组成的数组。PHP 5.1开始才支持此函数。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别。

二、函数语法:array array_diff_key ( $array1 , $array2 [, $...] )
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组; 
四、返回值:返回第一个数组中不包含在其他任何数组中的键名及其对应的值组成的数组。
五、用法举例:
1、两个数组的比较:
  只要第一个数组中的key出现在后续数组key中,不管值是不是一样,都不会出现在返回数组中。<?php
$arr1 = array("a"=>"aa", "b"=>"aiezu.com", "c"=>"cc");
$arr2 = array("a"=>false, "aiezu.com", "c"=>"cc");
print_r(array_diff_key($arr1, $arr2));输出:Array
(
<strong> => bb
)</strong>
2、三个数组的比较:<strong><?php
$arr1 = array("a"=>"aa", "b"=>"bb", "c"=>"cc");
$arr2 = array("a"=>false);
$arr3 = array("b"=>'bb');
print_r(array_diff_key($arr1, $arr2, $arr3));</strong>输出:<strong>Array
(
[c] => cc
)</strong>
3、array_diff_key是将数组键强制转换为"string"后进行"==="(全等于)比较:<strong><?php
$arr1 = array(false=>"aa"); #false做为数组键时会自动转换为0
$arr2 = array("0"=>false);
print_r($arr1);
print_r(array_diff_key($arr1, $arr2));</strong>输出:<strong>Array
(
[0] => aa
)
Array
(
)</strong> 查看全部
一、函数功能:
  计算出第一个数组与其他数组的键名差集(只考虑键名,不考虑键值)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键名,返回键名及其对应的值组成的数组。PHP 5.1开始才支持此函数。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别

二、函数语法:
array array_diff_key ( $array1 , $array2 [, $...] )

三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组;
 
四、返回值:
返回第一个数组中不包含在其他任何数组中的键名及其对应的值组成的数组。

五、用法举例:
1、两个数组的比较:
  只要第一个数组中的key出现在后续数组key中,不管值是不是一样,都不会出现在返回数组中。
<?php
$arr1 = array("a"=>"aa", "b"=>"aiezu.com", "c"=>"cc");
$arr2 = array("a"=>false, "aiezu.com", "c"=>"cc");
print_r(array_diff_key($arr1, $arr2));
输出:
Array
(
<strong> => bb
)</strong>

2、三个数组的比较:
<strong><?php
$arr1 = array("a"=>"aa", "b"=>"bb", "c"=>"cc");
$arr2 = array("a"=>false);
$arr3 = array("b"=>'bb');
print_r(array_diff_key($arr1, $arr2, $arr3));</strong>
输出:
<strong>Array
(
[c] => cc
)</strong>

3、array_diff_key是将数组键强制转换为"string"后进行"==="(全等于)比较:
<strong><?php
$arr1 = array(false=>"aa"); #false做为数组键时会自动转换为0
$arr2 = array("0"=>false);
print_r($arr1);
print_r(array_diff_key($arr1, $arr2));</strong>
输出:
<strong>Array
(
[0] => aa
)
Array
(
)</strong>

PHP array_diff_uassoc 函数

PHPllslx520 发表了文章 • 0 个评论 • 152 次浏览 • 2016-11-14 13:39 • 来自相关话题

一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值,对键名的比较使用自定义函数)。比较两到多个数组,返回第一个数组中不包含在其他任何数组中的键名/值对组成的数组。PHP 5才支持此函数。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别。
 
二、函数语法:array array_diff_uassoc ( $array1 , $array2 [, $...], $user_key_compare_func) 
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组;$user_key_compare_func用户自定义回调函数,用来比较键名。如果认为第一个键名小于,等于,或大于第二个键名时必须分别返回一个小于零,等于零,或大于零的整数。 
四、返回值:返回在第一个数组但不在其他数组的键/值对组成数组。
五、用法举例:
1、array_diff_uassoc 函数工作流程解析:<?php
function user_key_compare_func($k1, $k2) {
echo sprintf("%s %s %s\n", $k1, $k2, $k1===$k2 ? 0 : ($k1>$k2?1:-1) ); //debug行
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "b"=>2, "d"=>3);
$result = array_diff_uassoc($arr1, $arr2, "user_key_compare_func");
print_r($result);输出:b a 1 #数组$arr1键名排序去重
c b 1
b a 1 #数组$arr2键名排序去重
d b 1

a a 0 #键名相等,键值不相等(系统函数去比较),会出现在返回结果中
b a 1
b b 0 #键名相等,键值也相等(系统函数去比较),不会出现在返回结果中
c a 1
c b 1
c d -1
Array
(
[a] => 1
[c] => 3
)
2、使用类中的自定义函数比较三个数组:<?php
class user {
function key_compare($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
}
$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "d"=>3);
$arr3 = array('c'=>3);
$result = array_diff_uassoc($arr1, $arr2, $arr3, array("user", "key_compare"));
print_r($result);输出:Array
(
[a] => 1
<strong> => 2
)</strong> 查看全部
一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值,对键名的比较使用自定义函数)。比较两到多个数组,返回第一个数组中不包含在其他任何数组中的键名/值对组成的数组。PHP 5才支持此函数。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别
 
二、函数语法:
array array_diff_uassoc ( $array1 , $array2 [, $...], $user_key_compare_func)
 
三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组;
$user_key_compare_func用户自定义回调函数,用来比较键名。如果认为第一个键名小于,等于,或大于第二个键名时必须分别返回一个小于零,等于零,或大于零的整数。
 
四、返回值:
返回在第一个数组但不在其他数组的键/值对组成数组。

五、用法举例:
1、array_diff_uassoc 函数工作流程解析:
<?php
function user_key_compare_func($k1, $k2) {
echo sprintf("%s %s %s\n", $k1, $k2, $k1===$k2 ? 0 : ($k1>$k2?1:-1) ); //debug行
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "b"=>2, "d"=>3);
$result = array_diff_uassoc($arr1, $arr2, "user_key_compare_func");
print_r($result);
输出:
b a 1  #数组$arr1键名排序去重
c b 1
b a 1 #数组$arr2键名排序去重
d b 1

a a 0 #键名相等,键值不相等(系统函数去比较),会出现在返回结果中
b a 1
b b 0 #键名相等,键值也相等(系统函数去比较),不会出现在返回结果中
c a 1
c b 1
c d -1
Array
(
[a] => 1
[c] => 3
)

2、使用类中的自定义函数比较三个数组:
<?php
class user {
function key_compare($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
}
$arr1 = array("a"=>1, "b"=>2, "c"=>3);
$arr2 = array("a" =>'aa', "d"=>3);
$arr3 = array('c'=>3);
$result = array_diff_uassoc($arr1, $arr2, $arr3, array("user", "key_compare"));
print_r($result);
输出:
Array
(
[a] => 1
<strong> => 2
)</strong>

PHP array_diff_assoc 函数

PHPllslx520 发表了文章 • 0 个评论 • 141 次浏览 • 2016-11-14 13:30 • 来自相关话题

一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键名/值对。此函数和array_diff不同的是键名也参与比较。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别。

二、函数语法:array array_diff_assoc($array1, $array2 [, $...])
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组; 
四、返回值:返回带索引的比较第一个数组与其他数组的差集数组。
五、用法举例:
1、两个数组的比较:
  例中可以看出,第一个数组中的元素,只有键值对同时包含在第二个数组中,才不会出现在结果数组中。<?php
$arr1 = array('a'=>'aaa', 'b'=>"bbb", 'c'=>"ccc");
$arr2 = array('a'=>'aaa', 'c'=>"cc", 'bb'=>'bbb');
print_r(array_diff_assoc($arr1, $arr2));输出:Array
(
<strong> => bbb
[c] => ccc
)</strong>
2、三个数组的比较:<strong><?php
$arr1 = array('a'=>'爱E族', 'b'=>"百度", 'c'=>"aiezu.com");
$arr2 = array('a'=>'爱E族', "aiezu.com");
$arr3 = array('b'=>'百度');
print_r(array_diff_assoc($arr1, $arr2, $arr3));
</strong>输出:<strong>Array
(
[c] => aiezu.com
)</strong> 
3、array_diff_assoc是将数组值强制转换为"string"后进行"==="(全等于)比较:
  由于false强制转换为string后为"",数组强制转换为string后为"Array",所以下面例子运行结果为一个空数组。<strong><?php
$arr1 = array("", array(1));
$arr2 = array(false, array(2));
print_r(array_diff_assoc($arr1, $arr2));</strong>输出:<strong>Array
(
)</strong> 查看全部
一、函数功能:
  计算出第一个数组与其他数组的差集(考虑键名和键值)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键名/值对。此函数和array_diff不同的是键名也参与比较。关于计算数组差集系列函数的区别请参考页面:PHP数组计算差集系列函数的区别

二、函数语法:
array array_diff_assoc($array1, $array2 [, $...])

三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组;
 
四、返回值:
返回带索引的比较第一个数组与其他数组的差集数组。

五、用法举例:
1、两个数组的比较:
  例中可以看出,第一个数组中的元素,只有键值对同时包含在第二个数组中,才不会出现在结果数组中。
<?php
$arr1 = array('a'=>'aaa', 'b'=>"bbb", 'c'=>"ccc");
$arr2 = array('a'=>'aaa', 'c'=>"cc", 'bb'=>'bbb');
print_r(array_diff_assoc($arr1, $arr2));
输出:
Array
(
<strong> => bbb
[c] => ccc
)</strong>

2、三个数组的比较:
<strong><?php
$arr1 = array('a'=>'爱E族', 'b'=>"百度", 'c'=>"aiezu.com");
$arr2 = array('a'=>'爱E族', "aiezu.com");
$arr3 = array('b'=>'百度');
print_r(array_diff_assoc($arr1, $arr2, $arr3));
</strong>
输出:
<strong>Array
(
[c] => aiezu.com
)</strong>
 
3、array_diff_assoc是将数组值强制转换为"string"后进行"==="(全等于)比较:
  由于false强制转换为string后为"",数组强制转换为string后为"Array",所以下面例子运行结果为一个空数组。
<strong><?php
$arr1 = array("", array(1));
$arr2 = array(false, array(2));
print_r(array_diff_assoc($arr1, $arr2));</strong>
输出:
<strong>Array
(
)</strong>

PHP array_udiff 函数

PHPllslx520 发表了文章 • 0 个评论 • 115 次浏览 • 2016-11-14 12:07 • 来自相关话题

一、函数功能:
  计算出第一个数组与其他数组的键值差集(只考虑键值,不考虑键名,对键值的比较使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键值。数组的键名不参与比较,但返回数组中保留键名不变。关于计算差集系列函数的区别请参考:PHP数组计算差集系列函数的区别。
 
二、函数语法:array array_udiff ( $array1, $array2 [, $...], $user_value_compare_func) 
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组;$user_value_compare_func用户自定义回调函数,用来比较键值。如果认为第一个键值小于,等于,或大于第二个键值时必须分别返回一个小于零,等于零,或大于零的整数。 
四、返回值:返回第一个数组与其他数组的键值差集组成的数组。
五、用法举例:
1、PHP array_udiff 函数工作流程解析:<?php
function user_value_compare_func($v1, $v2) {
echo sprintf("debug: value %s %s %s\n", $v1, $v2, $v1===$v2 ? 0 : ($v1>$v2?1:-1) ); //debug行
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array('aiezu', 'b'=>'bb', 'com');
$arr2 = array('a'=>'aa', 'bb', 'c');
$result = array_udiff($arr1, $arr2, "user_value_compare_func");
print_r($result);输出:debug: value bb aiezu 1 #$arr1的排序出重
debug: value com bb 1
debug: value bb aa 1 #$arr2的排序出重
debug: value c bb 1

debug: value aiezu aa 1 #不相等
debug: value aiezu bb -1 #不相等
debug: value aiezu bb -1
debug: value bb aa 1
debug: value bb bb 0 #键值相等,不会出现在返回数组中
debug: value bb com -1
debug: value com bb 1
debug: value com c 1
Array
(
[0] => aiezu
[1] => com

2、使用类函数作为键值比较函数找出三个数组的差集:<?php
class user {
function value_compare($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}
}
$arr1 = array("a"=>1, "b"=>'aiezu.com', "c"=>3);
$arr2 = array("a" =>'aa', "d"=>3);
$arr3 = array('c'=>1);
$result = array_udiff($arr1, $arr2, $arr3, array("user", "value_compare"));
print_r($result);输出:Array
(
<strong> => aiezu.com
)</strong> 查看全部
一、函数功能:
  计算出第一个数组与其他数组的键值差集(只考虑键值,不考虑键名,对键值的比较使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键值。数组的键名不参与比较,但返回数组中保留键名不变。关于计算差集系列函数的区别请参考:PHP数组计算差集系列函数的区别
 
二、函数语法:
array array_udiff ( $array1, $array2 [, $...], $user_value_compare_func)
 
三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组;
$user_value_compare_func用户自定义回调函数,用来比较键值。如果认为第一个键值小于,等于,或大于第二个键值时必须分别返回一个小于零,等于零,或大于零的整数。
 
四、返回值:
返回第一个数组与其他数组的键值差集组成的数组。

五、用法举例:
1、PHP array_udiff 函数工作流程解析:
<?php
function user_value_compare_func($v1, $v2) {
echo sprintf("debug: value %s %s %s\n", $v1, $v2, $v1===$v2 ? 0 : ($v1>$v2?1:-1) ); //debug行
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array('aiezu', 'b'=>'bb', 'com');
$arr2 = array('a'=>'aa', 'bb', 'c');
$result = array_udiff($arr1, $arr2, "user_value_compare_func");
print_r($result);
输出:
debug: value bb aiezu 1  #$arr1的排序出重
debug: value com bb 1
debug: value bb aa 1 #$arr2的排序出重
debug: value c bb 1

debug: value aiezu aa 1 #不相等
debug: value aiezu bb -1 #不相等
debug: value aiezu bb -1
debug: value bb aa 1
debug: value bb bb 0 #键值相等,不会出现在返回数组中
debug: value bb com -1
debug: value com bb 1
debug: value com c 1
Array
(
[0] => aiezu
[1] => com
)
 
2、使用类函数作为键值比较函数找出三个数组的差集:
<?php
class user {
function value_compare($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}
}
$arr1 = array("a"=>1, "b"=>'aiezu.com', "c"=>3);
$arr2 = array("a" =>'aa', "d"=>3);
$arr3 = array('c'=>1);
$result = array_udiff($arr1, $arr2, $arr3, array("user", "value_compare"));
print_r($result);
输出:
Array
(
<strong> => aiezu.com
)</strong>