Array常用函数:
- array_diff( , [,...] ):计算数组的差集。
- 返回在 中但是不在 及任何其它参数数组(,...)中的值。
- array_diff():函数,比较的是值,与键无关。(字符串时区分大小写的)
- array_diff():函数,返回的键是在中的键。
- array_diff():函数,比较的是一维数组。(就是最外面的)
'PHP', 'C'=>'c', 'Js', 'C++', 'Node.js'];
$arr2 = ['code'=>'PHP','python', 'C++'];
$arr3 = ['Green', 'Blue', 'skip'];
var_dump( array_diff($arr1, $arr2, $arr3) );
?>
运行结果:
array(3) {
["C"]=> string(1) "c"
[0]=> string(2) "Js"
[2]=> string(7) "Node.js"
}
1.array_diff():返回的是第一个数组中的元素。
2.array_diff():比较的是值,而不是键。(如:'php'=>'PHP'和'code'=>'PHP',就是相同)
3.array_diff():返回的键,是在中元素对应的键。(如:[0]=>"Js",[2]=>"Node.js"都和$arr1中一致)
4.array_diff():需要参数类型是数组(Array)。(字符串类型或其他的都不得行,结果返回NULL)
- array_diff_assoc( , [,...] ):计算数组的差集。
- 与array_diff():函数的区别在于,这次比较的是键和值都必须一致。
- 其他特点,和array_diff()函数一致。
['PHP','S'=>'S'], 'C'=>'c', 'C++', 'Js', 'Node.js'];
$arr2 = ['code'=>'PHP','python', 'C++'];
$arr3 = ['Green', 'Blue', 'skip'];
var_dump( array_diff_assoc( $arr1, $arr2, $arr3) );
?>
运行结果:
array(5) {
["php"] => array(2) {
[0] => string(3) "PHP"
["S"] => string(1) "S"
}
["C"] => string(1) "c"
[0] => string(3) "C++"
[1] => string(2) "Js"
[2] => string(7) "Node.js"
}
1.从(和的C++)中,可以看到array_diff_assoc()函数比较的时键。(要求时键和值都一致,才认为匹对成功)
- isset():检查变量是否存在:
bool isset(mixed $var [,mixed $...]) //> php函数语法
- 可以同时检查多个变量是否存在。(and关系)
- 该函数只能检测变量。
- 如果var不存在或者为NULL,返回 false;如果var存在,返回 true。
变量不存在或值为NULL时,isset()返回false
$nu = null;
var_dump( isset($nu) ); //> false
var_dump( isset($sm) ); //> false
//> isset(NULL):出现程序错误;isset()只能解析变量
//> isset()支持多变量检查。(and关系)
$asd = "";
$dsa = 'php';
var_dump( isset($asd,$dsa) ); //> true
var_dump( isset($nu,$asd) ); //> false
?>
- 和 等是有区别的。
- isset()无法区别变量是存在还是为NULL值。(我们可以使用 === 区分或使用 is_null(mixed $var))
# isset判断变量是否存在 但是变量值为null时 返回值false
$nu = null;
var_dump( is_null( $null ), is_null(null)); //> true true
//> is_null():检查值是否为null(该值不一定是变量)
//> 如果变量不存在,使用is_null判断:
var_dump( is_null( $asc ) ); //> 抛出Notice警告,返回true
- isset():也可以检查数组元素是否存在。
$arr = ['xs'=>'xs','nu'=>null];
var_dump( isset($arr['xs']) ); //> true
var_dump( isset($arr['nu']) ); //> false
- 这是由于数组元素就是一个可变的类型。
- (php>=5.4)检查字符的非数字偏移量会返回 false。
$expected_array_got_string = 'somestring' ;
# $expected_array_got_string['some_key'] 偏移量之外
var_dump (isset( $expected_array_got_string [ 'some_key' ])); //> false
# $expected_array_got_string [0] = s
var_dump (isset( $expected_array_got_string [ 0 ])); //> true
# $expected_array_got_string ['0'] = s
var_dump (isset( $expected_array_got_string [ '0' ])); //> true
# $expected_array_got_string [0.5] = $expected_array_got_string [0] = s
var_dump (isset( $expected_array_got_string [ 0.5 ])); //> true
# $expected_array_got_string[ '0.5'] = s 偏移量之外
var_dump (isset( $expected_array_got_string [ '0.5' ])); //> false
# $expected_array_got_string [ '0 Mostel' ] = s
var_dump (isset( $expected_array_got_string [ '0 Mostel' ])); //> false
- defined():检查某个常量是否存在。
bool defined (string $name) //> php函数语法(注意:参数需要的是字符串)
- 检查该名称的常量是否已经被定义。
php的常量支持普通常量和魔术常量
var_dump( defined( 'APP' ) ); //> false
define('APP','application');
var_dump( defined( 'APP' ) ); //> true
//> defined():对魔术常量无效
var_dump( defined(__LINE__) ); //> false
var_dump( defined(__DIR__) ); //> false
?>
- defined():只对普通常量有效,对魔术常量无效(一直返回false)
- 常量的定义:define()函数。或使用const关键字。(后面详解)
- constant():返回一个常量的值。
- 用在,不知道常量的名字,但常量名在某个变量里时。
mixed constant( string $name ) //> php函数语法
* 返回值:正常 -- 返回常量的值;如果变量未定义返回 NULL 或抛出异常(E_WARING)
- define():定义一个常量。
bool define(string $name, mixed $value [,bool $case_insensitive = false])
- $name:表示常量名称,一般使用大写字母。
- $value:表示常量的值。
- $case_insensitive:(默认)false --- 大小写敏感;true --- 大些写不敏感。
define('PI', 3.1435926);
echo PI; //> 默认false,大小写敏感
define('TWO_PI',3.1415926, true);
echo two_pi; //> true:大小写不敏感。
- define()函数通常和defined()函数一起使用。
//> 如果PI常量不存在时,就定义常量PI。
defined('PI') or define('PI',3.14159265);
- array_merge():合并指定的数组(只能合并最外面一层数组)
array array_merge( array $arr1 [,array $...] )
- PHP5中要求,参数必须是数组。
- 把后面的参数和第一个参数合并起来。
- 如果后面的索引和前面的重复,就替换前面的值。
- 如果后面的键位数值,重新排序和前面的整合。
$arr1 = ['php'=>'PHP','c'=>'C','i want'];
// var_dump(array_merge($arr1,'me')); //> 提示第二个参数需要数组
//> 使用强制类型转换成数组的形式。
var_dump(array_merge($arr1,array('me')));
//> 相同键,后面覆盖前面
$arr2 = ['php'=>'Python',' you'];
var_dump( array_merge($arr1, $arr2) );
运行结果:
//> 相同数字的键值,拼接是要重新整合。
array(4) {
["php"]=> string(3) "PHP"
["c"]=> string(1) "C"
[0]=> string(6) "i want"
[1]=> string(2) "me"
}
//> 后面的python覆盖了前面的php字符串。
array(4) {
["php"]=> string(6) "Python"
["c"]=> string(1) "C"
[0]=> string(6) "i want"
[1]=> string(4) " you"
}
- array_merge_recursive():递归合并一个或多个数组。(相同键,不覆盖是合并)
array array_merge_recursive(array $arr1 [, array $...])
- 将一个或多个数组单元合并起来,值附加在前面一个的后面。(相同键进行合并,成数组。不是覆盖)
$ar1 = array( "color" => array( "favorite" => "red" ), 5 );
$ar2 = array( 10 , "color" => array( "favorite" => "green" , "blue" ), 5 );
$result = array_merge_recursive ( $ar1 , $ar2 );
print_r ( $result );
运行结果:
//> 相同值或键进行合并成数组。
Array
(
[color] => Array
(
[favorite] => Array
(
[0] => red
[1] => green
)
[0] => blue
)
[0] => 5
[1] => 10
[2] => 5
)
- in_array():检查数组中是否存在某个值
bool in_array( mixed $needle,array $haystack [,bool $atrict = false])
- 在 haystack 中搜索 needle,如果没有设置 strict 则使用宽松的比较。 (比较的是值,和键没有什么关系)
- $needle:如果是字符串,比较区分大小写。
- $haystack:需要检查的数组。
- $atrict:默认false,不检查数据类型;true,需要检查数据类型是否一致
//> in_array():函数和键无关,比较的是值
$arr = ['php'=>'PHP','C',520];
//> 字符串比较是要区分大小写的
var_dump( in_array('PHP', $arr) ); //> true
var_dump( in_array('php', $arr) ); //> false
//> in_array第三个参数严格判断数据类型
var_dump( in_array('520', $arr) ); //> true
var_dump( in_array('520', $arr, true) ); //> false
- in_array():在判断时,判断的是一维数组。
$a = [['p' ,'h'] ,['p' ,'r' ] ,'o' ];
if ( in_array (['p' ,'h'] ,$a )) {
echo "'ph' was found\n" ;
}
if ( in_array ( ['f' ,'i'] ,$a )) {
echo "'fi' was found\n" ;
}
if ( in_array ( 'o' , $a )) {
echo "'o' was found\n" ;
}
运行结果:
//> 如果把二维数组当作一维数组,in_array也是能判断的(也是判断的是值,其他维同理)
'ph' was found
'o' was found
- realpath(string $str):
[===================]
Ctype 函数
get_included_files
# 返回被 include 和 require 文件名的 array
# 返回被 include、include_once、require、require_once加载的文件
array get_included_files(void)
is_a
# 如果对象属于该类或该类是此对象的父类则返回 TRUE
bool is_a( object $object, string $class_name [, bool $allow_string = false] )
# 如果$object是$class_name类 | $class_name是$object的父类 返回true
# allow_string 如果此参数设置为FALSE,则不允许将字符串类名称作为对象。 如果该类不存在,这也可以防止调用自动加载器。
get_class
# 返回对象的类名
get_class( [ object $obj ] )
# 返回对象实例 obj 所属类的名字。如果 obj 不是一个对象则返回 FALSE
is_subclass_of
# 如果$object是$class_name的子类,则返回true,否则返回false
is_subclass_of( object $object, string $class_name )
preg_quote
# 转义正则表达式字符
# 在pattern字符串的每一个#符号前添加 反斜杠 (\#)
$pattern = preg_quote($pattern, '#');