PHP array_intersect 函数

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

一、函数功能:
  计算多个数组共同的键值交集(只考虑键值,不考虑键名)。数组的键名不参与比较,但返回数组中保留键值对应的键名不变。关于计算数组交集系列函数的区别请参考:http://aiezu.com/article/php_array_intersect_sets.html。

二、函数语法:array array_intersect ( $array1 , $array2 [, $... ] )
三、函数参数:参数名描述$array1参与比较的第一个数组;$array2参与比较的第二个数组;...参与比较的更多数组。
四、返回值:返回一个数组,该数组包含了参数中所有数组共同的键值。
五、用法举例:
1、两个数组的比较:
  比较时忽视key,返回结果中保留键名:<?php
$arr1 = array('aa', 'z'=>'aiezu.com', 'cc');
$arr2 = array('a'=>'aa', 'aiezu.com', 'c');
print_r(array_intersect($arr1, $arr2));输出:Array
(
[0] => aa
[z] => aiezu.com

2、三个数组的比较:
  只会返回第一个数组中,同时出现在其他所有数组中的键值。<?php
$arr1 = array('aa', 'b'=>'aiezu.com', 'cc');
$arr2 = array('a'=>'aa', 'aiezu.com', 'c');
$arr3 = array('cc', '爱E族', 'aa');
print_r(array_intersect($arr1, $arr2, $arr3));输出:Array
(
[0] => aa

3、array_intersect是将数组值强制转换为"string"后进行"==="(全等于)比较:
  由于false强制转换为string后为"",数组强制转换为string后为"Array",所以下面例子运行结果返回$arr1的所有键值。<?php
$arr1 = array("", array(1));
$arr2 = array(false, array(2));
print_r(array_intersect($arr1, $arr2));输出:Array
(
[0] =>
[1] => Array
(
[0] => 1
)
) 查看全部
一、函数功能:
  计算多个数组共同的键值交集(只考虑键值,不考虑键名)。数组的键名不参与比较,但返回数组中保留键值对应的键名不变。关于计算数组交集系列函数的区别请参考:http://aiezu.com/article/php_array_intersect_sets.html

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

三、函数参数:
参数名描述
$array1参与比较的第一个数组;
$array2参与比较的第二个数组;
...参与比较的更多数组。

四、返回值:
返回一个数组,该数组包含了参数中所有数组共同的键值。

五、用法举例:
1、两个数组的比较:
  比较时忽视key,返回结果中保留键名:
<?php
$arr1 = array('aa', 'z'=>'aiezu.com', 'cc');
$arr2 = array('a'=>'aa', 'aiezu.com', 'c');
print_r(array_intersect($arr1, $arr2));
输出:
Array
(
[0] => aa
[z] => aiezu.com
)
 
2、三个数组的比较:
  只会返回第一个数组中,同时出现在其他所有数组中的键值。
<?php
$arr1 = array('aa', 'b'=>'aiezu.com', 'cc');
$arr2 = array('a'=>'aa', 'aiezu.com', 'c');
$arr3 = array('cc', '爱E族', 'aa');
print_r(array_intersect($arr1, $arr2, $arr3));
输出:
Array
(
[0] => aa
)
 
3、array_intersect是将数组值强制转换为"string"后进行"==="(全等于)比较:
  由于false强制转换为string后为"",数组强制转换为string后为"Array",所以下面例子运行结果返回$arr1的所有键值。
<?php
$arr1 = array("", array(1));
$arr2 = array(false, array(2));
print_r(array_intersect($arr1, $arr2));
输出:
Array
(
[0] =>
[1] => Array
(
[0] => 1
)
)

PHP数组计算交集系列函数的区别

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

一、函数介绍:
  PHP数组交集计算函数,用来计算多个数组元素的共同交集。计算类型分为计算键名的交集、计算键值的交集、计算键名/值对的交集三类;计算方式分为系统默认函数计算和使用用户自定义函数计算两种。PHP数组交集计算函数共有8个。计算键名的交集:计算多个数组共同的键名交集(不考虑键值),返回时键名对应的键值保持不变一起返回。计算键名的交集函数有:array_intersect_key(),array_intersect_ukey()。计算键值的交集:计算多个数组共同的键值交集(不考虑键名),返回时键值对应的键名保持不变一起返回。计算键值的交集函数有:array_intersect(),array_uintersect()。计算键名/值对的交集:计算多个数组共同的键名/键值交集(同时考虑键名和键值)。计算键名/键值对的交集函数有:array_intersect_assoc(),array_uintersect_assoc(),array_intersect_uassoc(),array_uintersect_uassoc()。
 
数组交集比较函数功能差异表:函数名计算何种交集键名比较函数键值比较函数array_intersect()键值的交集,不考虑键名->系统默认array_uintersect()键值的交集,不考虑键名-自定义函数array_intersect_assoc()键名和键值的交集系统默认系统默认array_intersect_uassoc()键名和键值的交集自定义函数系统默认array_intersect_key()键名的交集,不考虑键值系统默认-array_intersect_ukey()键名的交集,不考虑键值自定义函数-array_uintersect_assoc()键名和键值的交集系统默认自定义函数array_uintersect_uassoc()键名和键值的交集自定义函数自定义函数 PHP数组计算差集系列函数的区别:http://aiezu.com/article/php_array_diff_sets.html
 
二、参数中的自定义比较函数:
  交集比较函数通过比较键名、键值是否想等,来判断是否是相同的键名、键值。只有同时出现所有数组中的键名、键值才会在返回数组中返回。为了方便大家实现个性化的需求,PHP为部分函数提供了接口,可以使用自定义函数来比较键名、键值是否相等。PHP会传递两个键名给键名自定义比较函数、或者两个键值给自定义键值比较函数,用户可以在自定义比较函数中根据自己的需求进行比较,只需给自定义函数一个整型返回值就行(返回0认为键名或键值相等)。
 
自定义比较函数演示:
1、使用基础函数方式:<?php
//爱E族 aiezu.com
#键名比较函数
function user_key_compare_func($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
#键值比较函数
function user_value_compare_func($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}用法:<?php
array_intersect_ukey($arr1, $arr2, 'user_key_compare_func');
array_uintersect($arr1, $arr2, 'user_value_compare_func');
array_uintersect_uassoc($arr1, $arr2, 'user_value_compare_func', 'user_key_compare_func');
array_uintersect_uassoc($arr1, $arr2, $arr3, 'user_value_compare_func', 'user_key_compare_func'); 
2、使用类的函数方式:<?php
//爱E族:aiezu.com
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;
}
}用法:<?php
array_intersect_ukey($arr1, $arr2, array('user', 'key_compare'));
array_uintersect($arr1, $arr2, array('user', 'value_compare'));
array_uintersect_uassoc($arr1, $arr2, array('user', 'value_compare'), array('user', 'key_compare'));
三、用法演示:
1、使用基础自定义函数,作为比较函数完整代码:<?php
function user_key_compare_func($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

function user_value_compare_func($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array("name"=>'爱E族', "en"=>"aiezu", "type"=>"com");
$arr2 = array("name"=>'爱E族', 'en'=>'string', "suffix"=>'com');

print_r(array_intersect_ukey($arr1, $arr2, 'user_key_compare_func'));
print_r(array_uintersect($arr1, $arr2, 'user_value_compare_func'));
print_r(array_uintersect_uassoc($arr1, $arr2, 'user_value_compare_func', 'user_key_compare_func'));输出:Array
(
[name] => 爱E族
[en] => aiezu
)
Array
(
[name] => 爱E族
[type] => com
)
Array
(
[name] => 爱E族

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("name"=>'爱E族', "en"=>"aiezu", "type"=>"com");
$arr2 = array("name"=>'爱E族', 'en'=>'string', "suffix"=>'com');

print_r(array_intersect_ukey($arr1, $arr2, array('user', 'key_compare')));
print_r(array_uintersect($arr1, $arr2, array('user', 'key_compare')));
print_r(array_uintersect_uassoc($arr1, $arr2, array('user', 'value_compare'), array('user', 'key_compare')));输出:Array
(
[name] => 爱E族
[en] => aiezu
)
Array
(
[name] => 爱E族
[type] => com
)
Array
(
[name] => 爱E族
)
3、交集比较函数的工作流程测试:
  这里以array_uintersect_uassoc()函数举例解析交集比较函数的工作流程,array_uintersect_uassoc()用来计算多个数组共同的键名/键值交集(同时考虑键名和键值,键名、键值的比较都使用自定义函数)<?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("name"=>'爱E族', "type"=>"domaim");
$arr2 = array("name"=>'爱E族', "type"=>'string');

$result = array_uintersect_uassoc($arr1, $arr2, "user_value_compare_func", "user_key_compare_func");
print_r($result);输出:debug key: type vs name 1 #$arr1键名的排序去重
debug key: type vs name 1 #$arr2键名的排序去重

debug key: name vs name 0 #键名相等、下步将比较键值是否相等
debug value: 爱E族 vs 爱E族 0 #键值也相等,将在返回数组中返回
debug key: type vs type 0 #键名相等、下步将比较键值是否相等
debug value: domaim vs string -1 #键值不相等,不会在返回数组中返回
Array
(
[name] => 爱E族
) 查看全部
一、函数介绍:
  PHP数组交集计算函数,用来计算多个数组元素的共同交集。计算类型分为计算键名的交集、计算键值的交集、计算键名/值对的交集三类;计算方式分为系统默认函数计算和使用用户自定义函数计算两种。PHP数组交集计算函数共有8个。
  • 计算键名的交集:计算多个数组共同的键名交集(不考虑键值),返回时键名对应的键值保持不变一起返回。计算键名的交集函数有:array_intersect_key(),array_intersect_ukey()。
  • 计算键值的交集:计算多个数组共同的键值交集(不考虑键名),返回时键值对应的键名保持不变一起返回。计算键值的交集函数有:array_intersect(),array_uintersect()。
  • 计算键名/值对的交集:计算多个数组共同的键名/键值交集(同时考虑键名和键值)。计算键名/键值对的交集函数有:array_intersect_assoc(),array_uintersect_assoc(),array_intersect_uassoc(),array_uintersect_uassoc()。

 
数组交集比较函数功能差异表:
函数名计算何种交集键名比较函数键值比较函数
array_intersect()键值的交集,不考虑键名->系统默认
array_uintersect()键值的交集,不考虑键名-自定义函数
array_intersect_assoc()键名和键值的交集系统默认系统默认
array_intersect_uassoc()键名和键值的交集自定义函数系统默认
array_intersect_key()键名的交集,不考虑键值系统默认-
array_intersect_ukey()键名的交集,不考虑键值自定义函数-
array_uintersect_assoc()键名和键值的交集系统默认自定义函数
array_uintersect_uassoc()键名和键值的交集自定义函数自定义函数
 PHP数组计算差集系列函数的区别:http://aiezu.com/article/php_array_diff_sets.html
 
二、参数中的自定义比较函数:
  交集比较函数通过比较键名、键值是否想等,来判断是否是相同的键名、键值。只有同时出现所有数组中的键名、键值才会在返回数组中返回。为了方便大家实现个性化的需求,PHP为部分函数提供了接口,可以使用自定义函数来比较键名、键值是否相等。PHP会传递两个键名给键名自定义比较函数、或者两个键值给自定义键值比较函数,用户可以在自定义比较函数中根据自己的需求进行比较,只需给自定义函数一个整型返回值就行(返回0认为键名或键值相等)。
 
自定义比较函数演示:
1、使用基础函数方式:
<?php
//爱E族 aiezu.com
#键名比较函数
function user_key_compare_func($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}
#键值比较函数
function user_value_compare_func($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}
用法:
<?php
array_intersect_ukey($arr1, $arr2, 'user_key_compare_func');
array_uintersect($arr1, $arr2, 'user_value_compare_func');
array_uintersect_uassoc($arr1, $arr2, 'user_value_compare_func', 'user_key_compare_func');
array_uintersect_uassoc($arr1, $arr2, $arr3, 'user_value_compare_func', 'user_key_compare_func');
 
2、使用类的函数方式:
<?php
//爱E族:aiezu.com
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;
}
}
用法:
<?php
array_intersect_ukey($arr1, $arr2, array('user', 'key_compare'));
array_uintersect($arr1, $arr2, array('user', 'value_compare'));
array_uintersect_uassoc($arr1, $arr2, array('user', 'value_compare'), array('user', 'key_compare'));

三、用法演示:
1、使用基础自定义函数,作为比较函数完整代码:
<?php
function user_key_compare_func($k1, $k2) {
if ( $k1 === $k2 ) {
return 0;
}
return $k1 > $k2 ? 1 : -1;
}

function user_value_compare_func($v1, $v2) {
if ( $v1 === $v2 ) {
return 0;
}
return $v1 > $v2 ? 1 : -1;
}

$arr1 = array("name"=>'爱E族', "en"=>"aiezu", "type"=>"com");
$arr2 = array("name"=>'爱E族', 'en'=>'string', "suffix"=>'com');

print_r(array_intersect_ukey($arr1, $arr2, 'user_key_compare_func'));
print_r(array_uintersect($arr1, $arr2, 'user_value_compare_func'));
print_r(array_uintersect_uassoc($arr1, $arr2, 'user_value_compare_func', 'user_key_compare_func'));
输出:
Array
(
[name] => 爱E族
[en] => aiezu
)
Array
(
[name] => 爱E族
[type] => com
)
Array
(
[name] => 爱E族
)
 
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("name"=>'爱E族', "en"=>"aiezu", "type"=>"com");
$arr2 = array("name"=>'爱E族', 'en'=>'string', "suffix"=>'com');

print_r(array_intersect_ukey($arr1, $arr2, array('user', 'key_compare')));
print_r(array_uintersect($arr1, $arr2, array('user', 'key_compare')));
print_r(array_uintersect_uassoc($arr1, $arr2, array('user', 'value_compare'), array('user', 'key_compare')));
输出:
Array
(
[name] => 爱E族
[en] => aiezu
)
Array
(
[name] => 爱E族
[type] => com
)
Array
(
[name] => 爱E族
)

3、交集比较函数的工作流程测试:
  这里以array_uintersect_uassoc()函数举例解析交集比较函数的工作流程,array_uintersect_uassoc()用来计算多个数组共同的键名/键值交集(同时考虑键名和键值,键名、键值的比较都使用自定义函数)
<?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("name"=>'爱E族', "type"=>"domaim");
$arr2 = array("name"=>'爱E族', "type"=>'string');

$result = array_uintersect_uassoc($arr1, $arr2, "user_value_compare_func", "user_key_compare_func");
print_r($result);
输出:
debug key: type vs name 1   #$arr1键名的排序去重
debug key: type vs name 1 #$arr2键名的排序去重

debug key: name vs name 0 #键名相等、下步将比较键值是否相等
debug value: 爱E族 vs 爱E族 0 #键值也相等,将在返回数组中返回
debug key: type vs type 0 #键名相等、下步将比较键值是否相等
debug value: domaim vs string -1 #键值不相等,不会在返回数组中返回
Array
(
[name] => 爱E族
)

PHP array_merge函数和array_merge_recursive函数的区别

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

一、函数介绍:
1、相同点:
  array_merge()函数和array_merge_recursive()函数的功能都是将多个数组合并成一个数组;所有数字键名的元素都会保留,合并后所有的数字键名会重新从0开始索引。
 
2、不同点:
  array_merge_recursive()会递归的合并多维数组的所有数组子元素,而array_merge()只会合并顶层元素;对于键名为非数字、且相同的元素,array_merge()函数合并后,只会保留最后一个元素,而array_merge_recursive()会将它们的键值全部保留到共同键名下的子数组中。
 
二、对比举例:
1、索引键名:
  array_merge函数和array_merge_recursive函数对数字键名的索引数组的处理演示。​<?php
$array1 = array('0'=>'000', '1'=>array('爱E族'));
$array2 = array('2'=>'222', '1'=>'aiezu.com');
print_r(array_merge($array1, $array2));
print_r(array_merge_recursive($array1, $array2));输出:Array
(
[0] => 000
[1] => Array
(
[0] => 爱E族
)
[2] => 222
[3] => aiezu.com
)
Array
(
[0] => 000
[1] => Array
(
[0] => 爱E族
)
[2] => 222
[3] => aiezu.com
)  上面代码可以看出,两个函数对数字键名索引数组处理完全相同,都会忽略相同键名,而是单纯的将所有元素放到一个数组,然后再从0开始重建键名。
 
2、关联数组:
  array_merge函数和array_merge_recursive函数对非数字键名的关联数组的处理演示。​<?php
$array1 = array('aa'=>'000', 'bb'=>array('爱E族'));
$array2 = array('cc'=>'222', 'bb'=>'aiezu.com');
print_r(array_merge($array1, $array2));
print_r(array_merge_recursive($array1, $array2));
输出:Array
(
[aa] => 000
[bb] => aiezu.com
[cc] => 222
)
Array
(
[aa] => 000
[bb] => Array
(
[0] => 爱E族
[1] => aiezu.com
)

[cc] => 222
)
  上面代码可以看出,对于关联数组,相同的“bb”键名,array_merge()函数合并后,只会保留最后一个“aiezu.com”,而array_merge_recursive()会将它们的键值全部保留到键名为“bb”的子数组中。 查看全部
一、函数介绍:
1、相同点:
  array_merge()函数和array_merge_recursive()函数的功能都是将多个数组合并成一个数组;所有数字键名的元素都会保留,合并后所有的数字键名会重新从0开始索引。
 
2、不同点:
  array_merge_recursive()会递归的合并多维数组的所有数组子元素,而array_merge()只会合并顶层元素;对于键名为非数字、且相同的元素,array_merge()函数合并后,只会保留最后一个元素,而array_merge_recursive()会将它们的键值全部保留到共同键名下的子数组中。
 
二、对比举例:
1、索引键名:
  array_merge函数和array_merge_recursive函数对数字键名的索引数组的处理演示。​
<?php
$array1 = array('0'=>'000', '1'=>array('爱E族'));
$array2 = array('2'=>'222', '1'=>'aiezu.com');
print_r(array_merge($array1, $array2));
print_r(array_merge_recursive($array1, $array2));
输出:
Array
(
[0] => 000
[1] => Array
(
[0] => 爱E族
)
[2] => 222
[3] => aiezu.com
)
Array
(
[0] => 000
[1] => Array
(
[0] => 爱E族
)
[2] => 222
[3] => aiezu.com
)
  上面代码可以看出,两个函数对数字键名索引数组处理完全相同,都会忽略相同键名,而是单纯的将所有元素放到一个数组,然后再从0开始重建键名。
 
2、关联数组:
  array_merge函数和array_merge_recursive函数对非数字键名的关联数组的处理演示。​
<?php
$array1 = array('aa'=>'000', 'bb'=>array('爱E族'));
$array2 = array('cc'=>'222', 'bb'=>'aiezu.com');
print_r(array_merge($array1, $array2));
print_r(array_merge_recursive($array1, $array2));
输出:
Array
(
[aa] => 000
[bb] => aiezu.com
[cc] => 222
)
Array
(
[aa] => 000
[bb] => Array
(
[0] => 爱E族
[1] => aiezu.com
)

[cc] => 222
)
  上面代码可以看出,对于关联数组,相同的“bb”键名,array_merge()函数合并后,只会保留最后一个“aiezu.com”,而array_merge_recursive()会将它们的键值全部保留到键名为“bb”的子数组中。

PHP array_merge_recursive 函数

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

一、函数功能:
  递归地合并一个或多个数组。所有的数字键名会重新从0开始索引;遇到相同非数字键名时,相同键名的键值会放到一个子数组中。
  该函数与array_merge()函数的区别在于:array_merge()函数相同非数字键名只会保留一个,最后键值会覆盖之前的键值。
 
二、函数语法:array array_merge_recursive ( $array1, $array2, [ $... ] ) 
三、函数参数:参数名描述$array1参与合并的第一个数组;$array2参与合并的第二个数组;...参与合并的其他数组。 
四、返回值:返回合并后的数组。 
五、用法举例:
1、数字键名的索引数组合并:
  数字键名的索引数组合并,键值会全部从0开始重新索引,所以即使相同的键名的键值也不会覆盖。<?php
$array1 = array('红', '绿');
$array2 = array('蓝', array('黑', '白'));
print_r(array_merge_recursive($array1, $array2));
echo PHP_EOL.PHP_EOL;

$array1 = array('1001'=>'aiezu.com', '1002'=>array('web', 'js'));
$array2 = array('1001'=>'爱E族');
$array3 = array('1002'=>'PHP');
print_r(array_merge($array1, $array2, $array3));输出:Array
(
[0] => 红
[1] => 绿
[2] => 蓝
[3] => Array
(
[0] => 黑
[1] => 白
)
)

Array
(
[0] => aiezu.com
[1] => Array
(
[0] => web
[1] => js
)
[2] => 爱E族
[3] => PHP
)
2、非数字键名的关联数组合并:
  非数字键名的关联数组,相同键名的键值会放到一个子数组中。<?php
$array1 = array('a'=>array('aiezu.com'), 'b'=>'web');
$array2 = array('a'=>'爱E族', 'c'=>'php');
$array3 = array('c'=>'java');
print_r(array_merge_recursive($array1, $array2, $array3));输出:Array
(
[a] => Array
(
[0] => aiezu.com
[1] => 爱E族
)
[b] => web
[c] => Array
(
[0] => php
[1] => java
)
) 查看全部
一、函数功能:
  递归地合并一个或多个数组。所有的数字键名会重新从0开始索引;遇到相同非数字键名时,相同键名的键值会放到一个子数组中。
  该函数与array_merge()函数的区别在于:array_merge()函数相同非数字键名只会保留一个,最后键值会覆盖之前的键值。
 
二、函数语法:
array array_merge_recursive ( $array1, $array2, [ $... ] )
 
三、函数参数:
参数名描述
$array1参与合并的第一个数组;
$array2参与合并的第二个数组;
...参与合并的其他数组。
 
四、返回值:
返回合并后的数组。
 
五、用法举例:
1、数字键名的索引数组合并:
  数字键名的索引数组合并,键值会全部从0开始重新索引,所以即使相同的键名的键值也不会覆盖。
<?php
$array1 = array('红', '绿');
$array2 = array('蓝', array('黑', '白'));
print_r(array_merge_recursive($array1, $array2));
echo PHP_EOL.PHP_EOL;

$array1 = array('1001'=>'aiezu.com', '1002'=>array('web', 'js'));
$array2 = array('1001'=>'爱E族');
$array3 = array('1002'=>'PHP');
print_r(array_merge($array1, $array2, $array3));
输出:
Array
(
[0] => 红
[1] => 绿
[2] => 蓝
[3] => Array
(
[0] => 黑
[1] => 白
)
)

Array
(
[0] => aiezu.com
[1] => Array
(
[0] => web
[1] => js
)
[2] => 爱E族
[3] => PHP
)

2、非数字键名的关联数组合并:
  非数字键名的关联数组,相同键名的键值会放到一个子数组中。
<?php
$array1 = array('a'=>array('aiezu.com'), 'b'=>'web');
$array2 = array('a'=>'爱E族', 'c'=>'php');
$array3 = array('c'=>'java');
print_r(array_merge_recursive($array1, $array2, $array3));
输出:
Array
(
[a] => Array
(
[0] => aiezu.com
[1] => 爱E族
)
[b] => web
[c] => Array
(
[0] => php
[1] => java
)
)

PHP array_merge 函数

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

一、函数功能:
  合并一个或多个数组。 所有的数字键名会重新从0开始索引;相同的非数字键名只会保留一个,最后键值会覆盖之前的键值。
  array_merge()函数与array_merge_recursive()区别是,array_merge_recursive()可以递归的合并多维数组,并不覆盖相同非数字键名的键值,而是将相同非数字键名的键值放到一个子数组中。
 
二、函数语法:array array_merge ( $array1, $array2 [, $... ] ) 
三、函数参数:参数名描述$array1参与合并的第一个数组;$array2参与合并的第额二个数组;...参与合并的更多数组; 
四、返回值:合并后的数组 
五、用法举例:
1、数字键名的索引数组合并:
  数字键名的索引数组合并,键名会全部从0开始重新索引,所以即使相同的键名的键值也不会覆盖。<?php
$array1 = array('red', 'blur');
$array2 = array('green', 'yellow');
print_r(array_merge($array1, $array2));
echo PHP_EOL.PHP_EOL;

$array1 = array('1001'=>'aiezu', '1002'=>'web');
$array2 = array('1001'=>'爱E族');
$array3 = array('1002'=>'aiezu.com');
print_r(array_merge($array1, $array2, $array3));输出:Array
(
[0] => red
[1] => blur
[2] => green
[3] => yellow
)


Array
(
[0] => aiezu
[1] => web
[2] => 爱E族
[3] => aiezu.com
)
2、非数字键名的关联数组合并:
  非数字键名的关联数组,相同键名的最后键值会覆盖之前的键值。<?php
$array1 = array('a'=>'aiezu', 'b'=>'web');
$array2 = array('a'=>'爱E族', 'c'=>'php');
print_r(array_merge($array1, $array2));输出:Array
(
[a] => 爱E族
[b] => web
[c] => php

3、使用"+"号合并数组:
  使用"+"号合并数组时,数字键名不会被重新索引。出现相同数字或非数组键名时,最先出现的键名的键值会被保留,后面的会被忽略。<?php
$array1 = array(1001=>'红色', 1002=>'绿色');
$array2 = array(1001=>'蓝色', 1003=>'黑色');
$array3 = array(1003=>'白色');
print_r($array1 + $array2 + $array3);


$array1 = array('a'=>'aiezu', 'b'=>'web');
$array2 = array('a'=>'爱E族', 'c'=>'php');
print_r($array1 + $array2);输出:Array
(
[1001] => 红色
[1002] => 绿色
[1003] => 黑色
)
Array
(
[a] => aiezu
[b] => web
[c] => php
) 查看全部
一、函数功能:
  合并一个或多个数组。 所有的数字键名会重新从0开始索引;相同的非数字键名只会保留一个,最后键值会覆盖之前的键值。
  array_merge()函数与array_merge_recursive()区别是,array_merge_recursive()可以递归的合并多维数组,并不覆盖相同非数字键名的键值,而是将相同非数字键名的键值放到一个子数组中。
 
二、函数语法:
array array_merge ( $array1, $array2 [, $... ] )
 
三、函数参数:
参数名描述
$array1参与合并的第一个数组;
$array2参与合并的第额二个数组;
...参与合并的更多数组;
 
四、返回值:
合并后的数组
 
五、用法举例:
1、数字键名的索引数组合并:
  数字键名的索引数组合并,键名会全部从0开始重新索引,所以即使相同的键名的键值也不会覆盖。
<?php
$array1 = array('red', 'blur');
$array2 = array('green', 'yellow');
print_r(array_merge($array1, $array2));
echo PHP_EOL.PHP_EOL;

$array1 = array('1001'=>'aiezu', '1002'=>'web');
$array2 = array('1001'=>'爱E族');
$array3 = array('1002'=>'aiezu.com');
print_r(array_merge($array1, $array2, $array3));
输出:
Array
(
[0] => red
[1] => blur
[2] => green
[3] => yellow
)


Array
(
[0] => aiezu
[1] => web
[2] => 爱E族
[3] => aiezu.com
)

2、非数字键名的关联数组合并:
  非数字键名的关联数组,相同键名的最后键值会覆盖之前的键值。
<?php
$array1 = array('a'=>'aiezu', 'b'=>'web');
$array2 = array('a'=>'爱E族', 'c'=>'php');
print_r(array_merge($array1, $array2));
输出:
Array
(
[a] => 爱E族
[b] => web
[c] => php
)
 
3、使用"+"号合并数组:
  使用"+"号合并数组时,数字键名不会被重新索引。出现相同数字或非数组键名时,最先出现的键名的键值会被保留,后面的会被忽略。
<?php
$array1 = array(1001=>'红色', 1002=>'绿色');
$array2 = array(1001=>'蓝色', 1003=>'黑色');
$array3 = array(1003=>'白色');
print_r($array1 + $array2 + $array3);


$array1 = array('a'=>'aiezu', 'b'=>'web');
$array2 = array('a'=>'爱E族', 'c'=>'php');
print_r($array1 + $array2);
输出:
Array
(
[1001] => 红色
[1002] => 绿色
[1003] => 黑色
)
Array
(
[a] => aiezu
[b] => web
[c] => php
)

PHP迅雷/快车/QQ旋风下载地址与普通URL链接互转

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

  PHP使用下面自定义函数,可以将迅雷/快车/QQ旋风下载地址、转换成普通URL地址,或者将普通URL地址、转换为迅雷/快车/QQ旋风等下载地址。

自定义函数代码:<?php
/*
* 将普通URL链接转换为迅雷、快车(FlashGet)、QQ旋风下载地址函数
* 爱E族:aiezu.com
*/
function download_url_encode( $url, $type = 'thunder' ) {
switch( strtolower($type) ) {
case "thunder":
$url = sprintf("thunder://%s", base64_encode(sprintf("AA%sZZ", $url)));
break;
case "flashget":
$url = sprintf("Flashget://%s", base64_encode(sprintf("[FLASHGET]%s[FLASHGET]", $url)));
break;
case "qqdl":
$url = sprintf("qqdl://%s", base64_encode($url));
break;
}
echo $url . "\n";
return $url;
}

/*
* 将迅雷、快车(FlashGet)、QQ旋风下载地址,转换为普通URL链接函数
* 爱E族:aiezu.com
*/
function download_url_decode( $url ) {
$match = parse_url( $url );
switch( strtolower($match['scheme']) ) {
case "thunder":
$url = substr(base64_decode($match['host']), 2, -2);
break;
case "flashget":
$url = substr(base64_decode($match['host']), 10, -10);
break;
case "qqdl":
$url = base64_decode($match['host']);
break;
}
return $url;

用法举例://普通链接转迅雷、快车、旋风下载链接(爱E族:aiezu.com)
$url = 'http://aiezu.com/download.zip'; //虚构的链接
echo sprintf("普通链接: %s\n", $url);
echo sprintf("迅雷链接: %s\n", download_url_encode($url, 'thunder'));
echo sprintf("快车链接: %s\n", download_url_encode($url, 'flashget'));
echo sprintf("旋风链接: %s\n", download_url_encode($url, 'qqdl'));

//迅雷、快车、旋风下载链接,转回普通链接(爱E族:aiezu.com)
echo sprintf("迅雷:%s\n", download_url_decode('thunder://QUFodHRwOi8vYWllenUuY29tL2Rvd25sb2FkLnppcFpa'));
echo sprintf("快车:%s\n", download_url_decode('Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9haWV6dS5jb20vZG93bmxvYWQuemlwW0ZMQVNIR0VUXQ=='));
echo sprintf("旋风:%s\n", download_url_decode('qqdl://aHR0cDovL2FpZXp1LmNvbS9kb3dubG9hZC56aXA='));输出:普通链接: http://aiezu.com/download.zip
迅雷链接: thunder://QUFodHRwOi8vYWllenUuY29tL2Rvd25sb2FkLnppcFpa
快车链接: Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9haWV6dS5jb20vZG93bmxvYWQuemlwW0ZMQVNIR0VUXQ==
旋风链接: qqdl://aHR0cDovL2FpZXp1LmNvbS9kb3dubG9hZC56aXA=

迅雷:http://aiezu.com/download.zip
快车:http://aiezu.com/download.zip
旋风:http://aiezu.com/download.zip 查看全部
  PHP使用下面自定义函数,可以将迅雷/快车/QQ旋风下载地址、转换成普通URL地址,或者将普通URL地址、转换为迅雷/快车/QQ旋风等下载地址。

自定义函数代码:
<?php
/*
* 将普通URL链接转换为迅雷、快车(FlashGet)、QQ旋风下载地址函数
* 爱E族:aiezu.com
*/
function download_url_encode( $url, $type = 'thunder' ) {
switch( strtolower($type) ) {
case "thunder":
$url = sprintf("thunder://%s", base64_encode(sprintf("AA%sZZ", $url)));
break;
case "flashget":
$url = sprintf("Flashget://%s", base64_encode(sprintf("[FLASHGET]%s[FLASHGET]", $url)));
break;
case "qqdl":
$url = sprintf("qqdl://%s", base64_encode($url));
break;
}
echo $url . "\n";
return $url;
}

/*
* 将迅雷、快车(FlashGet)、QQ旋风下载地址,转换为普通URL链接函数
* 爱E族:aiezu.com
*/
function download_url_decode( $url ) {
$match = parse_url( $url );
switch( strtolower($match['scheme']) ) {
case "thunder":
$url = substr(base64_decode($match['host']), 2, -2);
break;
case "flashget":
$url = substr(base64_decode($match['host']), 10, -10);
break;
case "qqdl":
$url = base64_decode($match['host']);
break;
}
return $url;
}
 
用法举例:
//普通链接转迅雷、快车、旋风下载链接(爱E族:aiezu.com)
$url = 'http://aiezu.com/download.zip'; //虚构的链接
echo sprintf("普通链接: %s\n", $url);
echo sprintf("迅雷链接: %s\n", download_url_encode($url, 'thunder'));
echo sprintf("快车链接: %s\n", download_url_encode($url, 'flashget'));
echo sprintf("旋风链接: %s\n", download_url_encode($url, 'qqdl'));

//迅雷、快车、旋风下载链接,转回普通链接(爱E族:aiezu.com)
echo sprintf("迅雷:%s\n", download_url_decode('thunder://QUFodHRwOi8vYWllenUuY29tL2Rvd25sb2FkLnppcFpa'));
echo sprintf("快车:%s\n", download_url_decode('Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9haWV6dS5jb20vZG93bmxvYWQuemlwW0ZMQVNIR0VUXQ=='));
echo sprintf("旋风:%s\n", download_url_decode('qqdl://aHR0cDovL2FpZXp1LmNvbS9kb3dubG9hZC56aXA='));
输出:
普通链接: http://aiezu.com/download.zip
迅雷链接: thunder://QUFodHRwOi8vYWllenUuY29tL2Rvd25sb2FkLnppcFpa
快车链接: Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9haWV6dS5jb20vZG93bmxvYWQuemlwW0ZMQVNIR0VUXQ==
旋风链接: qqdl://aHR0cDovL2FpZXp1LmNvbS9kb3dubG9hZC56aXA=

迅雷:http://aiezu.com/download.zip
快车:http://aiezu.com/download.zip
旋风:http://aiezu.com/download.zip

PHP stripcslashes 函数

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

一、函数功能:
  将反斜杠"\"开头的"\n"、"\r"…、八进制、十六进制,转换为对应的字符。它是addcslashes()函数的反向操作函数。
 
二、函数语法:string stripcslashes($str)
三、函数参数:参数描述$str需要反转义的字符串。
四、返回值:返回转义后的字符串。
五、用法举例:
1、单个字符:<?php
# 爱E族:aiezu.com
$str = "\\x41"; #ASCII编码表中A的十六进制表示41
echo sprintf("%s 经函数stripcslashes处理后为:%s;\n\n", $str, stripcslashes($str));

$str = "\\102"; #ASCII编码表中A的八进制表示102
echo sprintf("%s 经函数stripcslashes处理后为:%s;\n\n", $str, stripcslashes($str));

$str = "\\n"; #ASCII编码表中换行符
echo sprintf("%s 经函数stripcslashes处理后为(实现换行):%s;\n\n", $str, stripcslashes($str));输出:\x41 经函数stripcslashes处理后为:A;

\102 经函数stripcslashes处理后为:B;

\n 经函数stripcslashes处理后为(实现换行):

2、多个字符:<?php
echo stripcslashes("\x61\x69\x65\x7a\x75\x2e\x63\x6f\x6d");
echo "\n";
echo stripcslashes("\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xad\xa6\xe4\xb9\xa0");运行结果:aiezu.com
好好学习
3、stripcslashes与stripslashes的区别:
  stripcslashes()会将"\"开头的八进制、十六进制转换为对应的ASCII字符,而stripslashes()是简单的移除反斜杠:<?php
#爱E族 aiezu.com
$str = "\\x41";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));

$str = "\\102";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));运行结果:\x41 stripslashes:x41 stripcslashes:A
\102 stripslashes:102 stripcslashes:B 查看全部
一、函数功能:
  将反斜杠"\"开头的"\n"、"\r"…、八进制、十六进制,转换为对应的字符。它是addcslashes()函数的反向操作函数。
 
二、函数语法:
string stripcslashes($str)

三、函数参数:
参数描述
$str需要反转义的字符串。

四、返回值:
返回转义后的字符串。

五、用法举例:
1、单个字符:
<?php
# 爱E族:aiezu.com
$str = "\\x41"; #ASCII编码表中A的十六进制表示41
echo sprintf("%s 经函数stripcslashes处理后为:%s;\n\n", $str, stripcslashes($str));

$str = "\\102"; #ASCII编码表中A的八进制表示102
echo sprintf("%s 经函数stripcslashes处理后为:%s;\n\n", $str, stripcslashes($str));

$str = "\\n"; #ASCII编码表中换行符
echo sprintf("%s 经函数stripcslashes处理后为(实现换行):%s;\n\n", $str, stripcslashes($str));
输出:
\x41 经函数stripcslashes处理后为:A;

\102 经函数stripcslashes处理后为:B;

\n 经函数stripcslashes处理后为(实现换行):
;
 
2、多个字符:
<?php
echo stripcslashes("\x61\x69\x65\x7a\x75\x2e\x63\x6f\x6d");
echo "\n";
echo stripcslashes("\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xad\xa6\xe4\xb9\xa0");
运行结果:
aiezu.com
好好学习

3、stripcslashes与stripslashes的区别:
  stripcslashes()会将"\"开头的八进制、十六进制转换为对应的ASCII字符,而stripslashes()是简单的移除反斜杠:
<?php
#爱E族 aiezu.com
$str = "\\x41";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));

$str = "\\102";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));
运行结果:
\x41 stripslashes:x41 stripcslashes:A
\102 stripslashes:102 stripcslashes:B

PHP stripslashes 函数

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

一、函数功能:
  addslashes的反向操作,移除addslashes()函数添加的转义反斜杠字符。

二、函数语法:string stripslashes($str)
三、函数参数:参数描述$str要移除转义反斜杠的字符串。
四、返回值:返回移除转义反斜杠后的字符串
五、用法举例:
1、基本用法:<?php
$str = "it\'s";
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

$str = '欢迎来到\"爱E族:aiezu.com\"';
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

$str = 'abc\\ndef';
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));输出:it\'s >转换为-> it's
欢迎来到\"爱E族:aiezu.com\" >转换为-> 欢迎来到"爱E族:aiezu.com"
abc\ndef >转换为-> abcndef
 
2、移除规则:<?php
#一个斜杠时移除斜杠
$str = "it\\'s"; #每两个斜杠转为一个斜杠,变量$str值只包含一个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

#连续两个斜杠时移除一个斜杠
$str = "\\\\"; #此处变量$str值实际为两个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

#连续三个斜杠时移除两个斜杠
$str = "\\\\\\"; #此处变量$str值实际为三个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

#连续四个斜杠时移除个斜杠
$str = "\\\\\\\\"; #此处变量$str值实际为四个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));输出:it\'s >转换为-> it's
\\ >转换为-> \
\\\ >转换为-> \
\\\\ >转换为-> \\ 
3、移除多维数组值的反斜杠:<?php
function array_stripslashes( $array ){
if(is_array($array) ){
foreach($array as $key=>&$value){
$value=array_stripslashes($value);
}
return $array;
}else{
return stripslashes($array);
}
}
$arr = array(
'aa'=>"爱E族"
,'ab'=>array(
'ba'=>"\'aiezu.com\'"
,'bb'=>"Is\'t a book?"
)
);
$arr = array_stripslashes($arr);
print_r($arr);输出:Array
(
[aa] => 爱E族
[ab] => Array
(
[ba] => 'aiezu.com'
[bb] => Is't a book?
)
)
4、stripslashes与stripcslashes的区别:
  stripslashes()是简单的移除反斜杠,而stripcslashes()会将"\"开头的八进制、十六进制转换为对应的ASCII字符:<?php
#爱E族: aiezu.com
$str = "\\x41";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));

$str = "\\102";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));输出:\x41 stripslashes:x41 stripcslashes:A
\102 stripslashes:102 stripcslashes:B  查看全部
一、函数功能:
  addslashes的反向操作,移除addslashes()函数添加的转义反斜杠字符。

二、函数语法:
string stripslashes($str)

三、函数参数:
参数描述
$str要移除转义反斜杠的字符串。

四、返回值:
返回移除转义反斜杠后的字符串

五、用法举例:
1、基本用法:
<?php
$str = "it\'s";
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

$str = '欢迎来到\"爱E族:aiezu.com\"';
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

$str = 'abc\\ndef';
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));
输出:
it\'s >转换为-> it's
欢迎来到\"爱E族:aiezu.com\" >转换为-> 欢迎来到"爱E族:aiezu.com"
abc\ndef >转换为-> abcndef

 
2、移除规则:
<?php
#一个斜杠时移除斜杠
$str = "it\\'s"; #每两个斜杠转为一个斜杠,变量$str值只包含一个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

#连续两个斜杠时移除一个斜杠
$str = "\\\\"; #此处变量$str值实际为两个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

#连续三个斜杠时移除两个斜杠
$str = "\\\\\\"; #此处变量$str值实际为三个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));

#连续四个斜杠时移除个斜杠
$str = "\\\\\\\\"; #此处变量$str值实际为四个斜杠
echo sprintf("%s >转换为-> %s\n", $str, stripslashes($str));
输出:
it\'s >转换为-> it's
\\ >转换为-> \
\\\ >转换为-> \
\\\\ >转换为-> \\
 
3、移除多维数组值的反斜杠:
<?php
function array_stripslashes( $array ){
if(is_array($array) ){
foreach($array as $key=>&$value){
$value=array_stripslashes($value);
}
return $array;
}else{
return stripslashes($array);
}
}
$arr = array(
'aa'=>"爱E族"
,'ab'=>array(
'ba'=>"\'aiezu.com\'"
,'bb'=>"Is\'t a book?"
)
);
$arr = array_stripslashes($arr);
print_r($arr);
输出:
Array
(
[aa] => 爱E族
[ab] => Array
(
[ba] => 'aiezu.com'
[bb] => Is't a book?
)
)

4、stripslashes与stripcslashes的区别:
  stripslashes()是简单的移除反斜杠,而stripcslashes()会将"\"开头的八进制、十六进制转换为对应的ASCII字符:
<?php
#爱E族: aiezu.com
$str = "\\x41";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));

$str = "\\102";
echo sprintf("%s stripslashes:%s stripcslashes:%s\n", $str, stripslashes($str), stripcslashes($str));
输出:
\x41 stripslashes:x41 stripcslashes:A
\102 stripslashes:102 stripcslashes:B
 

PHP addcslashes 函数

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

一、函数功能:
  以 C 语言风格为字符串中的“指定字符”添加反斜杠。它是stripcslashes()函数的反向操作函数,同时它也是stripcslashes()函数的升级版。

二、函数语法:string addcslashes($str, $charlist)
三、函数参数:参数描述$str要添加反斜杠的原始字符串$charlist指定要添加反斜杠的字符合集
1、指定多个字符:“abc”,“123”,“、“abc123\t\n”;
2、使用斜杠开头的八进制:“\020\018”,“\096”(对于不可见字符非常有用);
3、指定一个范围:“\141..\177”,“a..z”,“0..9”。
四、返回值:返回添加反斜杠完成的字符串。
五、用法举例:
1、为换行符和制表符添加反斜杠:
  换行符和制表符经过下面addcslashes函数处理后,不再有换行,而是用加了斜杠的转义符形式表示(\011为制表符\b的ASCII八进制编码):<?php
# 爱E族:aiezu.com
$str1 = "ab
cd ef";
echo addcslashes($str1, "\n\011");输出:ab\ncd\tef 
2、通过ASCII编码表范围,指定要添加反斜杠的字符:
  此例中除数字123外,其他字符都被添加反斜杠,因为其他字符都在ASCII编码表的“A..z”范围内:<?php
# 爱E族:aiezu.com
echo addcslashes("ABC123[_]abc", "A..z");
echo addcslashes("ABC123[_]abc", "\101..\172");输出:\A\B\C123\[\_\]\a\b\c
\A\B\C123\[\_\]\a\b\c 
3、无效的ASCII编码表范围:
  由于只有递增才是有效的ASCII编码表范围,所以下例中的"z..A"不是有效的ASCII编码表范围,抛出一条警告信息,且只有"zA."三个字符被添加反斜杠。<?php
# 爱E族:aiezu.com
echo addcslashes("ABCz.123[_]abc", "z..A");输出:PHP Warning: addcslashes(): Invalid '..'-range, '..'-range needs to be incrementing in /tmp/a.php on line 2
\ABC\z\.123[_]abc 查看全部
一、函数功能:
  以 C 语言风格为字符串中的“指定字符”添加反斜杠。它是stripcslashes()函数的反向操作函数,同时它也是stripcslashes()函数的升级版。

二、函数语法:
string addcslashes($str, $charlist)

三、函数参数:
参数描述
$str要添加反斜杠的原始字符串
$charlist指定要添加反斜杠的字符合集
1、指定多个字符:“abc”,“123”,“、“abc123\t\n”;
2、使用斜杠开头的八进制:“\020\018”,“\096”(对于不可见字符非常有用);
3、指定一个范围:“\141..\177”,“a..z”,“0..9”。

四、返回值:
返回添加反斜杠完成的字符串。

五、用法举例:
1、为换行符和制表符添加反斜杠:
  换行符和制表符经过下面addcslashes函数处理后,不再有换行,而是用加了斜杠的转义符形式表示(\011为制表符\b的ASCII八进制编码):
<?php
# 爱E族:aiezu.com
$str1 = "ab
cd ef";
echo addcslashes($str1, "\n\011");
输出:
ab\ncd\tef
 
2、通过ASCII编码表范围,指定要添加反斜杠的字符:
  此例中除数字123外,其他字符都被添加反斜杠,因为其他字符都在ASCII编码表的“A..z”范围内:
<?php
# 爱E族:aiezu.com
echo addcslashes("ABC123[_]abc", "A..z");
echo addcslashes("ABC123[_]abc", "\101..\172");
输出:
\A\B\C123\[\_\]\a\b\c
\A\B\C123\[\_\]\a\b\c
 
3、无效的ASCII编码表范围:
  由于只有递增才是有效的ASCII编码表范围,所以下例中的"z..A"不是有效的ASCII编码表范围,抛出一条警告信息,且只有"zA."三个字符被添加反斜杠。
<?php
# 爱E族:aiezu.com
echo addcslashes("ABCz.123[_]abc", "z..A");
输出:
PHP Warning:  addcslashes(): Invalid '..'-range, '..'-range needs to be incrementing in /tmp/a.php on line 2
\ABC\z\.123[_]abc

PHP addslashes 函数

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

一、函数功能:
  数据库查询语句的要求,在单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符) 等特殊字符前添加反斜杠。它是stripslashes()函数的反向操作函数。

二、函数语法:string addslashes($str)
三、函数参数:参数描述$str要为特殊字符添加反斜杠的元素字符串。
四、返回值:返回添加反斜杠完成的字符串。
五、用法举例:
1、基本用法:<?php
# 爱E族:aiezu.com
echo addslashes("it's\n");
echo addslashes('abc"def\123');输出:it\'s
abc\"def\\123 
2、给Sql查询参数添加反斜杠:<?php
# 爱E族:aiezu.com
#未使用addslashes函数添加反斜杠的SQL语句
$title = "it's";
$sql = "select * from Table where title='{$title}'";
echo '$sql值为: ' . $sql;
echo "\n\n";

#使用addslashes函数添加反斜杠的SQL语句:
$title = addslashes("it's");
$sql = "select * from Table where title='{$title}'";
echo '$sql值为: ' . $sql;输出:$sql值为: select * from Table where title='it's'

$sql值为: select * from Table where title='it\'s'注:上面一条SQL语句由于"it's"的单引号导致SQL中的title查询值闭合单引号提前闭合,而导致如下错误:
PHP Fatal error:  Uncaught exception 'Exception' with message 'MySQL Query Error : You have an error in your SQL syntax; check the manual that corresponds to your Mysql server version for the right syntax to use near 's'' at line 1<br /> SQL:select * from Table where title='it's'' in /tmp/mysql.php:148
 
3、对数组元素使用addslashes:<?php
# 爱E族:aiezu.com
function array_addslashes( $array ){
if(is_array($array) ){
foreach($array as $key=>&$value){
$value=array_addslashes($value);
}
return $array;
}else{
return addslashes($array);
}
}
$arr = array(
'aa'=>"O'Reilly"
,'ab'=>array(
'ba'=>"It's"
,'bb'=>"Is't a book?"
)
);
$arr = array_addslashes($arr);
print_r($arr);输出:Array
(
[aa] => O\'Reilly
[ab] => Array
(
[ba] => It\'s
[bb] => Is\'t a book?
)

4、对浏览器发送到http服务器的数据进行addslashes转义:
  当php.ini配置文件中magic_quotes_gpc配置项值为On时,浏览器发送到服务器的数据($_POST, $_GET, $_COOKUE)会自动进行addslashes转义,无需再次进行addslashes转义(PHP 5.4 之前 magic_quotes_gpc 默认是 On)。我们可以通过get_magic_quotes_gpc函数检测magic_quotes_gpc配置项值是否为On:<?php
# 爱E族:aiezu.com
function array_addslashes( $array ){
if(is_array($array) ){
foreach($array as $key=>&$value){
$value=array_addslashes($value);
}
return $array;
}else{
return addslashes($array);
}
}
if ( ! get_magic_quotes_gpc() ) {
$_POST = array_addslashes($_POST);
$_GET = array_addslashes($_GET);
$_COOKIE= array_addslashes($_COOKIE);
} 查看全部
一、函数功能:
  数据库查询语句的要求,在单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符) 等特殊字符前添加反斜杠。它是stripslashes()函数的反向操作函数。

二、函数语法:
string addslashes($str)

三、函数参数:
参数描述
$str要为特殊字符添加反斜杠的元素字符串。

四、返回值:
返回添加反斜杠完成的字符串。

五、用法举例:
1、基本用法:
<?php
# 爱E族:aiezu.com
echo addslashes("it's\n");
echo addslashes('abc"def\123');
输出:
it\'s
abc\"def\\123
 
2、给Sql查询参数添加反斜杠:
<?php
# 爱E族:aiezu.com
#未使用addslashes函数添加反斜杠的SQL语句
$title = "it's";
$sql = "select * from Table where title='{$title}'";
echo '$sql值为: ' . $sql;
echo "\n\n";

#使用addslashes函数添加反斜杠的SQL语句:
$title = addslashes("it's");
$sql = "select * from Table where title='{$title}'";
echo '$sql值为: ' . $sql;
输出:
$sql值为: select * from Table where title='it's'

$sql值为: select * from Table where title='it\'s'
注:上面一条SQL语句由于"it's"的单引号导致SQL中的title查询值闭合单引号提前闭合,而导致如下错误:
PHP Fatal error:  Uncaught exception 'Exception' with message 'MySQL Query Error : You have an error in your SQL syntax; check the manual that corresponds to your Mysql server version for the right syntax to use near 's'' at line 1<br /> SQL:select * from Table where title='it's'' in /tmp/mysql.php:148
 
3、对数组元素使用addslashes:
<?php
# 爱E族:aiezu.com
function array_addslashes( $array ){
if(is_array($array) ){
foreach($array as $key=>&$value){
$value=array_addslashes($value);
}
return $array;
}else{
return addslashes($array);
}
}
$arr = array(
'aa'=>"O'Reilly"
,'ab'=>array(
'ba'=>"It's"
,'bb'=>"Is't a book?"
)
);
$arr = array_addslashes($arr);
print_r($arr);
输出:
Array
(
[aa] => O\'Reilly
[ab] => Array
(
[ba] => It\'s
[bb] => Is\'t a book?
)
)
 
4、对浏览器发送到http服务器的数据进行addslashes转义:
  当php.ini配置文件中magic_quotes_gpc配置项值为On时,浏览器发送到服务器的数据($_POST, $_GET, $_COOKUE)会自动进行addslashes转义,无需再次进行addslashes转义(PHP 5.4 之前 magic_quotes_gpc 默认是 On)。我们可以通过get_magic_quotes_gpc函数检测magic_quotes_gpc配置项值是否为On:
<?php
# 爱E族:aiezu.com
function array_addslashes( $array ){
if(is_array($array) ){
foreach($array as $key=>&$value){
$value=array_addslashes($value);
}
return $array;
}else{
return addslashes($array);
}
}
if ( ! get_magic_quotes_gpc() ) {
$_POST = array_addslashes($_POST);
$_GET = array_addslashes($_GET);
$_COOKIE= array_addslashes($_COOKIE);
}