数组排序
<?php
$arr = array(
2,1,4,5,6
);
sort($arr);
listarr($arr,'sort');
rsort($arr);
listarr($arr,'rsort');
function listarr($arr,$name){
echo $name;
echo PHP_EOL;
foreach($arr as $key => $val){
echo $key,'--',$val;
echo PHP_EOL;
}
echo PHP_EOL;
}
//key的序列会重新调整
sort
0--1
1--2
2--4
3--5
4--6
rsort
0--6
1--5
2--4
3--2
4--1
<?php
$arr = array(
2,1,4,5,6
);
asort($arr);
listarr($arr,'asort');
arsort($arr);
listarr($arr,'arsort');
function listarr($arr,$name){
echo $name;
echo PHP_EOL;
foreach($arr as $key => $val){
echo $key,'--',$val;
echo PHP_EOL;
}
echo PHP_EOL;
}
//保留原来的键值对应关系
asort
1--1
0--2
2--4
3--5
4--6
arsort
4--6
3--5
2--4
0--2
1--1
<?php
$arr = array(
2=>'2',4=>'4',3=>'3',6=>'6',5=>'5'
);
ksort($arr);
listarr($arr,'ksort');
krsort($arr);
listarr($arr,'krsort');
function listarr($arr,$name){
echo $name;
echo PHP_EOL;
foreach($arr as $key => $val){
echo $key,'--',$val;
echo PHP_EOL;
}
echo PHP_EOL;
}
//比较键的大小,用于关联数组
ksort
2--2
3--3
4--4
5--5
6--6
krsort
6--6
5--5
4--4
3--3
2--2
数组元素插入取出
<?php
$fruit = array("orange", "banana");
array_unshift($fruit, "apple", "raspberry");
//array("apple", "raspberry","orange", "banana")
array_shift($fruit);
//array("raspberry","orange", "banana")
array_push($fruit,"apple");
//array("raspberry","orange", "banana","apple")
array_pop($fruit);
//array("raspberry","orange", "banana")
array_pad(array(),$length,value)
用值将数组填补到指定长度
<?php
$input = array(12, 10, 9);
$result = array_pad($input, 5, 0);
// result is array(12, 10, 9, 0, 0)
$result = array_pad($input, -7, -1);
// result is array(-1, -1, -1, -1, 12, 10, 9)
$result = array_pad($input, 2, "noop");
// not padded
array_sum
<?php
$arr = array(1,2,3,4,5);
echo array_sum($arr);
array_diff()
计算数组的差集
//返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
##
Array
(
[1] => blue
)
array_diff_key()
使用键名比较计算数组的差集
<?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_key($array1, $array2));
##
array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}
array_diff_assoc()
带索引检查计算数组的差集,即键名键值都一致就排除
<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
##
Array
(
[b] => brown
[c] => blue
[0] => red
)
array_intersect()
计算数组的交集
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
##
Array
(
[a] => green
[0] => red
)
array_intersect_key()
使用键名比较计算数组的交集
<?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_intersect_key($array1, $array2));
##
array(2) {
["blue"]=>
int(1)
["green"]=>
int(3)
}
array_unique
返回没有重复值的新数组,键名保持不变,同值保留第一个
<?php
$arr = array(1,2,2,2,5);
echo count( array_unique($arr) );
listarr(array_unique($arr),'unique');
function listarr($arr,$name){
echo $name;
echo PHP_EOL;
foreach($arr as $key => $val){
echo $key,'--',$val;
echo PHP_EOL;
}
echo PHP_EOL;
}
//去除重复元素,键不会重新排序
3unique
0--1
1--2
4--5
array_flip($arr)
将数组键值调转,同名保留最后一个
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
print_r(array_flip(array_flip($input)));
##可以达到跟array_unique()同样的效果
Array
(
[b] => green
[2] => red
[1] => blue
)
array_rand
<?php
//返回一个随机值
$arr = array(1,2,2,2,5);
echo $arr[array_rand($arr)];
extract
<?php
$arr = array(
'name'=>'ligbee'
);
extract($arr);
echo $name;
echo PHP_EOL;
$new = compact(name);
echo($new['name']);
//extract将 数组 转换为 变量-值
ligbee
//compac将 变量-值 转换为 数组
ligbee
array_walk
<?php
$arr = array(1,2,3);
function add($val){
echo ++$val;
}
array_walk($arr,'add');
//将数组中的元素传递给定义的函数
234
array_map
<?php
$arr = array(1,2,3);
function add($val){
return ++$val;
}
$new = array_map('add',$arr);
print_r($new);
//
Array
(
[0] => 2
[1] => 3
[2] => 4
)
array_filter($arr,callback)
数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则数组的当前值会被包含在返回的结果数组中,FALSE则被移除。数组的键名保留不变。
<?php
function odd($var)
{
return($var & 1);
}
function even($var)
{
return(!($var & 1));
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>
##
Odd :
Array
(
[a] => 1
[c] => 3
[e] => 5
)
Even:
Array
(
[0] => 6
[2] => 8
[4] => 10
[6] => 12
)
//当callback为空时,数组值为空,null,0时返回FALSE
<?php
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => ''
);
print_r(array_filter($entry));
?>
##
Array
(
[0] => foo
[2] => -1
)
array_reduce($arr,callback[,initial])
将回调函数迭代地作用到数组中的每一个单元中,从而将数组简化为单一的值。如果指定了可选参数 initial,该参数将被当成是数组中的第一个值来处理,或者如果数组为空的话就作为最终返回值。
<?php
function rsum($v, $w)
{
$v += $w;
return $v;
}
function rmul($v, $w)
{
$v *= $w;
return $v;
}
$a = array(1, 2, 3, 4, 5);
$x = array();
$b = array_reduce($a, "rsum"); //15
$c = array_reduce($a, "rmul", 10); //1200
$d = array_reduce($x, "rsum", "No data to reduce"); //No data to reduce
?>
array_combine(array(),array())
创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
<?php
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);
print_r($c);
?>
##
Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)
array_chunk
将一维数组分组成二维
<?php
$arr = array('l','i','g','b','e','e');
print_r(array_chunk($arr,3));
##
Array
(
[0] => Array
(
[0] => l
[1] => i
[2] => g
)
[1] => Array
(
[0] => b
[1] => e
[2] => e
)
)
array_column($arr,key)
返回数组中指定的一列
<?php
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
$first_names = array_column($records, 'first_name');
print_r($first_names);
?>
##
Array
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
array_serach($str, array())
在数组中搜索给定的值,如果成功则返回相应的键名
<?php
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array); // $key = 1;
?>
current(array()) 指针
返回数组中的当前单元
<?php
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'bike';
$mode = current($transport); // $mode = 'bike';
$mode = prev($transport); // $mode = 'foot';
$mode = end($transport); // $mode = 'plane';
$mode = current($transport); // $mode = 'plane';
$arr = array();
var_dump(current($arr)); // bool(false)
$arr = array(array());
var_dump(current($arr)); // array(0) { }
?>