PHP数组函数有很多个,但是比较常用的并不多,很多函数很好用,但是记得的人并不多,这边列几个我比较熟悉的。
array_filter()-过滤数组
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
参数:如果没有传递第二个参数,则过滤$array中等值('',0,false)
为false的数据。
示例1(过滤空值):
<?php
$arr = array('a'=>'','b'=>3,'c'=>4);
$res = array_filter($arr);
print_r($arr);
print_r($res);
结果:
Array ( [a] => [b] => 3 [c] => 4 )
Array ( [b] => 3 [c] => 4 )
示例2:用回调函数过滤数组中的单元
<?php
$arr = array('a'=>6,'b'=>3,'c'=>4);
function getOdd($val)
{
if ($val % 2) {
return $val;
}
}
$res = array_filter($arr,'getOdd');
print_r($arr);
print_r($res);
结果:
Array ( [a] => 6 [b] => 3 [c] => 4 )
Array ( [b] => 3 )
array_column()-返回数组中指定的一列
array array_column ( array $input , mixed $column_key [, mixed $index_key ] )
函数会返回二维数组中,指定键名列,组成新的一维数组
示例(返回二维数组中指定键名的值,组成的新的数组):
<?php
$arr = array(
array(
'id' => 1,
'name' => 'vilay'
),
array(
'id' => 2,
'name' => 'vtest'
),
array(
'id' => 5,
'name' => 'vname'
)
);
$new_arr = array_column($arr,'name');
echo "<pre>";
print_r($new_arr);
结果:
Array
(
[0] => vilay
[1] => vtest
[2] => vname
)
示例2:(以二维数组中的某一个键值作为新数组的键值):
<?php
$arr = array(
array(
'id' => 1,
'name' => 'vilay'
),
array(
'id' => 2,
'name' => 'vtest'
),
array(
'id' => 5,
'name' => 'vname'
)
);
$new_arr = array_column($arr,'name','id');
echo "<pre>";
print_r($new_arr);
结果:
Array
(
[1] => vilay
[2] => vtest
[5] => vname
)
函数是好用,但是对PHP版本要求比较高,必须大于5.5以上的PHP中才有,但是我们也可以自己实现
实现示例:
if(!function_exists('array_column')){
function array_column(array $input, $columnKey, $indexKey = null) {
$result = array();
if (null === $indexKey) {
if (null === $columnKey) {
$result = array_values($input);
} else {
foreach ($input as $row) {
$result[] = $row[$columnKey];
}
}
} else {
if (null === $columnKey) {
foreach ($input as $row) {
$result[$row[$indexKey]] = $row;
}
} else {
foreach ($input as $row) {
$result[$row[$indexKey]] = $row[$columnKey];
}
}
}
return $result;
}
}
array_unique()-去除数组中的重复值
该函数会把数组中重复的值去掉。
示例:
<?php
$arr = array(
'a' => 123,
'b' => 4,
'c' => 4,
'd' => 6
);
$new_arr = array_unique($arr);
echo "<pre>";
print_r($new_arr);
结果:
Array
(
[a] => 123
[b] => 4
[d] => 6
)
array_count_values()-统计数组中所有的值出现的次数
array array_count_values ( array $input )
array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在 input 数组中出现的次数作为值。
示例:
<?php
$array = array(1, "hello", 1, "world", "hello");
echo "<pre>";
print_r(array_count_values($array));
结果:
Array
(
[1] => 2
[hello] => 2
[world] => 1
)
array_search()-在数组中搜索给定的值,如果成功则返回相应的键名
示例:
<?php
$array = array(1, "hello", 1, 'c'=>"world", "hello");
echo "<pre>";
print_r(array_search('world',$array));
结果:
c
array_merge()-合并一个或多个数组
array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
示例1:合并关联数组(后面重复键名的值会覆盖前面的值)
<?php
$array = array('a'=>"hello", 'c'=>"world");
$arr = array('a'=>'hellod','d'=>'world');
echo "<pre>";
$new_arr = array_merge($array,$arr);
print_r($new_arr);
结果:
Array
(
[a] => hellod
[c] => world
[d] => world
)
示例2:合并关联数组和索引数组
<?php
$array = array('a'=>"hello", 'c'=>"world");
$arr = array('hellod','world');
echo "<pre>";
$new_arr = array_merge($array,$arr);
print_r($new_arr);
结果:
Array
(
[a] => hello
[c] => world
[0] => hellod
[1] => world
)
示例3:合并索引数组
<?php
$array = array("hello", "world");
$arr = array('hellod','worldc');
echo "<pre>";
$new_arr = array_merge($array,$arr);
print_r($new_arr);
结果:
Array
(
[0] => hello
[1] => world
[2] => hellod
[3] => worldc
)
array_map()-函数作用到数组中的每个值上,并返回带有新值的数组
示例:
<?php
$arr = array (2,3,4);
function multiple($a)
{
return $a * 4;
}
$new_arr = array_map('multiple',$arr);
echo "<pre>";
print_r($new_arr);
结果:
Array
(
[0] => 8
[1] => 12
[2] => 16
)
array_key_exists()-检查给定的键名或索引是否存在于数组中
示例:
$arr = array('a'=>3,'b'=>'hello');
if (array_key_exists('b', $arr)) {
echo 'exists';
} else {
echo 'not exists';
}
结果:
exists
isset() 函数也可以检测,但是对于null值并不会检测到
示例:
$arr = array('a'=>3,'b'=>'hello','d'=>null);
if (array_key_exists('d', $arr)) {
echo 'exists';
} else {
echo 'not exists';
}
if (isset($arr['d'])) {
echo 'its exists';
}
结果:
exists
ksort(),krsort(),asort()
ksort() - 对关联数组按照键名进行升序排序 krsort - 对关联数组按照键名进行降序排序 asort() - 对关联数组按照键值进行升序排序
PHP数组函数有很多,这边只是列了几个比较常用的,建议多看手册学习。