[]
来操作下标,也可以使用 {}
进行互换,建议使用 []
来指定下标
unset(): 允许删除数组中的某个键,但不会重建索引。需要用 array_values() 重新建立索引。
$arr=[1,2,3,4,5];
$arr1=[1,3,5,7];
$arr2=['a','b','c','d'];
$earr=[$arr,$arr1,$arr2];
注意:需要保证一定要是下标连续的索引数组
优点
count(数组)
获取数组的长度,是数组的实际元素的个数不足
';
}
?>
//优化
';
}
?>
语法:
foreach(数组 as 自定义变量)
";
}
?>
语法:
foreach(数组 as 下标变量 => 值变量)
可以取到下标
aa','bb','cc','dd');
foreach($arr as $k=>$value){
echo "{$k} =======> {$value}+"
";
}
?>
list()
函数list()函数 但这个函数和其他函数用法不同
作用 : 将数组中的元素转为变量使用
例子
each()
函数each() 只是一个函数,参数就是一个数组作为参数,返回的值,也是一个数组
作用:
例子
$arr = ['one' => "1", "s", "h"];
echo 'pre';
$one = each($arr);
print_r($one);
$one = each($arr);
print_r($one);
echo '
';
#### 使用组合方式遍历数组
使用 list(),each(),while 遍历数组
reset()
例子
'key', 'php', 'java', 'four'];
while(list($key,$val) = each($arr){
echo "{$key} => {$val}
";
}
reset($arr);
while(list($key,$val) = each($arr){
echo "{$key} => {$val}
";
}
?>
移动数组指针
超全局数组(变量),在PHP的脚本中,已经声明完的变量,你可以直接去使用即可!变量的名字已经规定好了
例子
$v){
echo "{$k} => {$v}\n";
}
//全局
$arr = ['123','111'];
function demo(){
global $arr;
echo $arr[0]."和".$arr[1];
}
demo();
//
$_SERVER
服务器变量
array_values
返回数组中所有的值//格式
//array array_values(array input)
$a = array('name' => '张三', 'age' => 20, 'sex' => '男');
$values = array_values($a);
var_dump($values);
//返回:array(3){[0]=>string(4)"张三" [1]=>int(20) [2]=>string(2)"男"}
array_keys
返回数组中所有的键名//格式
//array array_keys(array input[,mixed search_value [,bool strict]])
//如果 search_value 有值,则只返回该值得键名,
//strict 为是否强制匹配 search_value 类型,默认值为 false
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$keys = array_keys($a);
//返回:array(3) { [0]=> string(4) "name" [1]=> string(3) "age" [2]=> string(3) "sex" }
in_array
检查数组中是否存在某个值,存在返回true//格式
//bool in_array(mixed value, array 目标数组, bool strict)
//strict 为是否强制匹配 search_value 类型,默认值为 false
$a = array("name"=>"张三","age"=>20,"sex"=>"男",array('a','b'));
if(in_array("张三",$a)){
echo " ‘张三’在\$a数组中"; //”张三“在$a数组中
}
if(in_array(array('a','b'),$a){
echo "数组存在";
}
//返回:‘张三’在$a数组中
array_search
在数组中搜索指定的值,如果成功则返回相应的键名注意:
如果搜索的值在数组中出现不值一次,则返回第一个匹配的值
用法和 in_array 一样,只不过返回的是键名
array_key_exists
检查给定的键名或索引是否存在于数组中格式
bool array_key_exists(mixed $key, array $search)
例子
$a = array("name"=>"张三","age"=>20,"sex"=>"男",array('a','b'));
if(array_key_exists("name",$a)){
echo " 存在";
}else{
echo "不存在";
}
对比: isset()
//当数组中键名对应的值为NULL时 isset() 不会返回ture, 而 array_key_exists() 会
$search_array = array('first' => null, 'second' => 5);
//return false
isset($search_array['first']);
//return true
array_key_exists('first',$search_array);
array_flip
交换数组中的键和值注意
格式
array array_flip(array trans)
例子
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$b = array_flip($a);
foreach($b as $k=>$v){
echo "$k=>$v "; // 张三=>name 20=>age 男=>sex
}
array_reverse
返回一个元素顺序相反的数组格式
array array_reverse(array array,[,bool preserve_keys])
例子
//如果 preserver_keys 为 true 则保留原来的键名 默认为 true
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$b = array_reverse($a);
foreach($b as $k=>$v){
echo “$k=>$v ”; // sex=>男 age=>20 name=>张三
}
count
统计数组中的单元数目或对象中的属性个数注意
格式
int count(mixed $var [,int $mode]);
例子
$a = array(
array("name"=>"张三","age"=>20,"sex"=>"男"),
array("name"=>"李四","age"=>20,"sex"=>"男"),
);
//统计元素个数
echo count($a);
//递归统计数组个数 8个 本身两个+6个递归出来的
echo count($a,1);
array_count_values
统计数组中所有的值出现的次数格式
array array_count_values(array $input);
例子
$a = array("张三",20,20,20,"男","男","男");
print_r(array_count_values($a));
array_unique
移除数组中重复的值格式
array array_unique(array $array);
例子
$a = array("张三",20,20,20,"男","男","男");
print_r(array_unique($a));
array_filter()
使用回调函数过滤数组中的单元格式
array array_filter(array $input, [, callback $callback]);
例子
$arr = array(1,2,3,4,5,false,5,7,9,0,-1,-2,-3,null);
//过滤判定为 false 的值
var_dump(array_filter($arr));
//过滤负数
var_dump(array_filter($arr,"myFun");
function myFun($value){
if($value >= 0){
return true;
}else{
return false;
}
}
//过滤2的倍数
var_dump(array_filter($arr,function($value){
return !($value%2==0);
}));
array_walk
对数组中所有的元素应用函数格式
bool array_walk(&$arr,callback $callback [, mixed $userdata]);
$calback可以有三个参数,第一个参数为数组的值,第二个参数为数组的键,第三个参数是 array_walk 函数的点三个参数
例子
$arr = array(1,2,3,4,5);
$arr1 = array("name"=>"张三","age"=>20,"sex"=>"男");
//处理数组的值
array_walk($arr,"myFun");
function myFun(&$value){
$value = $value*$value;
}
//处理数组下标
array_walk($arr1,function(&$value, $key){
$value = $key.$value;
});
//函数的第三个参数
array_walk($arr1,function(&$value, $key, $str){
$value = $value.$key.$str;
},'123');
array_map
将回调函数作用到给定数组的单元上格式
array array_map(callback $callback, array arr1 [,array ....]);
$callback 的参数是后面数组的元素,后面有多少个数组,它就有多少个参数
例子
$arr = [1,2,3,4,5];
$arr1 = ['a','b','c','d'];
$arr2 = ['one','two','three'];
function myFun($v,$v1,$v2){
echo "$v ---- $v1 ---- $v2";
}
array_map("myFun",$arr,$arr1,$arr2);
//把数组合并为二维数组
array_map(null,$arr,$arr1,$arr2);
//输出
array(
[1,'a','one'],
[2,'b','two'],
[3,'c','three'],
[4,'d',null],
[5,null,null]
);
重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
";
}
$key[0]){
$right[] = $arr[$i];
}else{
$left[] = $arr[$i];
}
}
$left = qsort($left);
$right = qsort($right);
//右序遍历,从大到小
return array_merge($right,$key,$left);
}
print_r(qsort($arr));
sort
– 对数组排序(升序)rsort
– 对数组逆向排序(降序)ksort
– 对数组按照键名排序krsort
– 对数组按照键名逆向排序asort
– 对数组排序并保持索引关系(关联数组排序)arsort
– 对数组进行逆向排序并保持索引关系natsort
– 用“自然排序”算法对数组排序natcasesort
– 用“自然排序”算法对数组进行不区分大小写字母的排序usort
– 使用用户自定义的比较函数对数组中的值进行排序uasort
– 使用用户自定义的比较函数对数组中的值进行排序并保持索引关系uksort
– 使用用户自定义的比较函数对数组中的键名进行排序array_multisort
– 对多个数组或多维数组进行排序array_multisort
可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。通过对之前的数组进行排序,进而影响之后的数组
格式
array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) : bool
array1 : 要排序的array
array1_sort_order : 之前array参数要排序的顺序。
SORT_ASC : 按照升序排序(默认)
SORT_DESC : 按照降序排序
array1_sort_flags : 排序类型标识
SORT_REGULAR-将项目按照通常方法比较(不修改类型)(默认)
SORT_NUMERIC-按照数字大小比较
SORT_STRING-按照字符串比较
SORT_LOCALE_STRING-根据本地化设置按照字符串比较
SORT_NATURAL-以字符串“自然排序”
SORT_FLAG_CASE-可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串
... 更多组,像上面那样组合的参数
一维数组排序
二位数组排序
把二维数组中的一列数据提取出来,这样就可以让函数在排序那一列数据的时候来把二维数组排序
0,'name'=>'asdlf','age'=>20],
['sex'=>1,'name'=>'a阿斯顿','age'=>60],
['sex'=>1,'name'=>'对策','age'=>30],
['sex'=>1,'name'=>'速度','age'=>80],
['sex'=>0,'name'=>'等风','age'=>90]
];
$arr1 = [];
foreach($arr as $v){
$arr1[] = $v['age'];
}
array_multisort($arr1,SORT_DESC,$arr);
print_r($arr1);
print_r($arr);
array_slice
从数组中取出一段格式
array array_slice(array $arr,int $offset [,int $length [,bool $preserve_keys]]);
返回根据 $offset 和 $length 参数所指定的 array 数组中的一段序列
offset :如果 offset 非负,则序列将从 array 中的此偏移量开始(偏移量从0开始),如果offset 为负,则序列将从 array 中距离末端这么远的地方开始
length :如果给出了 length 且为正 则序列中将具有这么多的单元 如果给出了 length 且为负 则序列将终止在距离数组末端这么远的地方 如果省略 则序列将从 offset 开始一直到 array 的末端
preserver_keys :false 重置数组的键,true 不重置数组的键,默认为false,只重置 int 类型的键值
例子
'c','d','b'];
$arr = array_slice($a,1);
var_dump($arr);
echo '
';
$arr = array_slice($a,1,-1,true);
var_dump($arr);
echo '
';
$arr = array_slice($a,1,-1,true);
var_dump($arr);
echo '
';
输出:
array(4) { [0]=> string(1) "b" ["a"]=> string(1) "c" [1]=> string(1) "d" [2]=> string(1) "b" }
array(3) { [1]=> string(1) "b" ["a"]=> string(1) "c" [2]=> string(1) "d" }
array(3) { [1]=> string(1) "b" ["a"]=> string(1) "c" [2]=> string(1) "d" }
array_splice()
把数组的一部分去掉并用其它值取代语法
array array_splice(array &$arr, int $offset [,int $length [array $replacement]]);
用法和 array_slice() 一样
把 arr 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数 则用它数组中的单元取代, 返回一个包含有被移除单元的数组,注意,input 中的数字键名不被保留
例子
'c','d','b'];
$b = ['asdf','sdfsd','edev','asdfsdf'];
$arr = array_splice($a,1,2,$b);
var_dump($arr);
echo '
';
var_dump($a);
输出:
array(2) { [0]=> string(1) "b" ["a"]=> string(1) "c" }
array(7) { [0]=> string(1) "a" [1]=> string(4) "asdf" [2]=> string(5) "sdfsd" [3]=> string(4) "edev" [4]=> string(7) "asdfsdf" [5]=> string(1) "d" [6]=> string(1) "b" }
array_combine
创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值语法
array array_combine(array keys, array values);
注意:如果两个数组的单元数不同或者数组为空时返回 false
例子
';
$arr = array_combine($a,$c);
var_dump($arr);
输出:
array(4) { ["a"]=> string(4) "asdf" ["b"]=> string(4) "asdf" ["c"]=> string(4) "edev" ["d"]=> string(7) "asdfsdf" }
Warning: array_combine(): Both parameters should have an equal number of elements in F:\www\Test\error\index.php on line 8
bool(false)
+
合并数组注意: 下标相同会覆盖,是前面的覆盖后面的
例子
string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(4) "asdf" }
array_merge()
合并一个或多个数组语法
array array_merge(array $array1 [,array $array2 ...])
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面,返回作为结果的数组
如果数组中有相同的字符串键名,则后面的值覆盖前面的值,如果包含数字键名,后面的值会附加到后面
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引
合并数组并重新索引
'c','d'];
$b = ['asdf','sdfsd',8=>'edev','asdfsdf','asdf'];
$c = ['asdf','sdfsd','edev','asdfsdf'];
$d = array_merge($a,$b);
var_dump(array_merge($a));
echo('
');
var_dump($d);
输出:
array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" }
array(9) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(4) "asdf" [5]=> string(5) "sdfsd" [6]=> string(4) "edev" [7]=> string(7) "asdfsdf" [8]=> string(4) "asdf" }
array_intersect()
计算数组的交集语法
array array_intersect(array $array1 [,array $array2 ...])
返回一个数组,该数组包含了所有在数组 array1 中出现,也同时在其他参数数组中出现的值
注意:键名保持不变
例子
'c','d'];
$c = ['b','sdfsd','d','asdfsdf'];
$d = array_intersect($a,$c);
var_dump($d);
输出:
array(2) { [1]=> string(1) "b" [7]=> string(1) "d" }
array_diff()
计算数组的差集语法
array array_diff(array $array1 [,array $array2 ...])
返回一个数组,该数组包含了所有在数组 array1 中,但不在任何其他参数数组中的值
注意:键名保持不变
例子
'c','d'];
$b = ['asdf','sdfsd',8=>'edev','asdfsdf','asdf'];
$c = ['b','sdfsd','d','asdfsdf'];
$d = array_diff($a,$c);
var_dump($d);
输出:
array(2) { [0]=> string(1) "a" [6]=> string(1) "c" }
';
echo array_pop($zhan).'
';
echo array_pop($zhan).'
';
echo array_pop($zhan).'
';
echo array_pop($zhan).'
';
echo array_pop($zhan).'
';
print_r($zhan);
输出:
d
c
b
a
5
4
Array ( [0] => 1 [1] => 2 [2] => 3 )
另一种方法
";
echo array_shift($dl).'
';
echo array_shift($dl).'
';
echo array_shift($dl).'
';
echo array_shift($dl).'
';
输出:
Array ( [0] => a [1] => 5 [2] => 4 [3] => 3 [4] => 2 [5] => 1 )
a
5
4
3
";
echo array_pop($dl).'
';
echo array_pop($dl).'
';
echo array_pop($dl).'
';
echo array_pop($dl).'
';
输出:
Array ( [0] => a [1] => 5 [2] => 4 [3] => 3 [4] => 2 [5] => 1 )
1
2
3
4
另一种方法
";
echo array_shift($dl).'
';
echo array_shift($dl).'
';
echo array_shift($dl).'
';
echo array_shift($dl).'
';
输出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => a )
1
2
3
4
array_rand()
从数组中随机取出一个或多个单元语法
array_rand(array $input [,int $num_req]);
随机返回一个或多个数组单元, num_req 指明了想取出多少个单元,如果没有指定,默认为1
如果只取出一个,返回一个随机单元的键名,否则返回包含随机键名的数组
例子
int(2) [1]=> int(3) [2]=> int(4) }
shuffle()
将数组打乱语法
bool shuffle(array &$array)
此函数将打乱数组顺序,并删除键名,重新赋值
例子
'b',3,'c',5,6];
$b = shuffle($a);
var_dump($a);
输出:
array(6) { [0]=> string(1) "b" [1]=> int(6) [2]=> int(5) [3]=> string(1) "c" [4]=> string(1) "a" [5]=> int(3) }
array_sum
计算数组中所有值的和语法
number array_sum(array $array)
将数组中所有值的和以整数或浮点数的结构返回
例子
'b',3,'c',5,6];
$b = array_sum($a);
var_dump($b);
输出:
int(14)
range()
建立一个包含知道范围单元的数组语法
array range(mixed $low,mixed $high [,number $step])
返回数组中从 low 到 high 的单元,包括他们本身,如果 low > high,序列将从 high 到 low
如果给出了 step 的值,它将被作为单元之间的步进值,默认为1
例子
";
$b = range(1,10,2);
var_dump($b);
输出:
array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) }
array(5) { [0]=> int(1) [1]=> int(3) [2]=> int(5) [3]=> int(7) [4]=> int(9) }
array_fill()
用给定的值填充数组语法
array array_fill(int $start_index, int $num, mixed $value)
用value的值将一个数组填充 num 个条目,键名有 start_index 参数指定的开始。
例子
string(1) "a" [6]=> string(1) "a" [7]=> string(1) "a" [8]=> string(1) "a" [9]=> string(1) "a" [10]=> string(1) "a" [11]=> string(1) "a" [12]=> string(1) "a" [13]=> string(1) "a" [14]=> string(1) "a" }