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数组函数有很多,这边只是列了几个比较常用的,建议多看手册学习。