PHP常用数组函数

本文详细介绍PHP数组的各种操作方法,包括数组提取、生成、检查、输出、添加、删除、搜索、键值操作、自定义函数应用、过滤、统计、排序、合并、截取、交并差集、随机排序、求和、列提取等,覆盖了PHP数组处理的所有关键方面。
摘要由CSDN通过智能技术生成

list() 提取数组中多个值

void list(mixed …)
将数组 $sales 值赋给其它变量,
相当于 $a = $sales[0]; b = b = b=sales[1]; c = c = c=sales[2];

$sales  = [
    ['Northeast', date('m-d'), 12.54],
    ['Northwest', date('m-d'), 563.90],
    ['Southeast', date('m-d'), 16.12],
];
list($a, $b, $c) = $sales;

输出:
$a Array([0] => Northeast[1] => 06-15[2] => 12.54)
$b Array([0] => Northwest[1] => 06-15[2] => 563.9)
$c Array([0] => Southeast[1] => 06-15[2] => 16.12)

range() 用预定义的值生成数组

参数1开始,参数2结束,参数3步长

$die = range(1, 6, 2);
$list = range('A', 'Z');

输出:
Array ( [0] => 1 [1] => 3 [2] => 5 )
Array ( [0] => A [1] => B [2] => C [3] => D [4] => E …)

is_array() 检查是否数组

boolean is_array(mixed variable)

$string = is_array('string') ;
$string = is_array([]) ;

输出: bool(false), bool(true)

foreach() 输出数组

foreach ($sales as $sale_v){
    print_r($sale_v);
}

array_unshift() 在数组头添加元素

$color = ['red', 'blue', 'green'];
array_unshift($color, 'yellow','pink');

输出:
Array ( [0] => yellow [1] => pink [2] => red [3] => blue [4] => green )

array_push() 在数组末尾添加元素

$color = ['red', 'blue', 'green'];
array_push($color, 'white','black');

输出:
Array ( [0] => red [1] => blue [2] => green [3] => white [4] => black )

array_shift() 在数组头删除元素

array_shift ( array &$array ) : mixed

$color = ['red', 'blue', 'green'];
array_shift($color);

输出:
Array ( [0] => blue [1] => green )

array_pop() 从数组末尾删除元素

$color = ['red', 'blue', 'green'];
array_pop($color);

输出:
Array ( [0] => red [1] => blue )

in_array() 搜索在数组是否存在某个值

$color = ['orange', 'blue', 'tan', 'yellow'];
$states = in_array('yellow', $color);

输出: bool(true)

array_search() 搜索数组中是否存在某个值,并返回对应的键

不存在会返回FALSE

$color = ['orange', 'blue', 'tan', 'yellow'];
$states  = array_search('yellow', $color);
$states  = array_search('black', $color);

输出: 3, bool(false)

array_keys() 获取数组键, array_values() 获取数组值

返回枚举数组

$fruit = [0 => 'apple', 1 => 'banana', 2 => 'peach', 3 => 'pear'];
$index = array_keys($fruit);
$fruits =  array_values($fruit);

输出:
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 )
Array ( [0] => apple [1] => banana [2] => peach [3] => pear )

array_walk() 向数组传入自定义函数

array_walk 只可传入自定义函数

$color = ['red', 'blue', 'green'];
function ucword(&$value, $key){
    $value = ucwords($value);
}
array_walk($color,  "ucword");

输出:
Array ( [0] => Red [1] => Blue [2] => Green )

array_map() 对数组的每一个元素应用回调函数

与array_walk()不同点,array_map() 可以传入自定义函数,也可以传入系统函数,array_map() 会返回处理过的数据

$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_ucwords = array_map('ucwords' , $array);

输出:
Array( [0] => Alpha [1] => Atomic [2] => Beta [3] => Bank)

示例二:
递归,把多维数组转字符串
再转一维数组的话,对返回的字符串使用 explode()函数

function arrToStr($arr){
    if(is_array($arr)){
        return join(',', array_map('arrToStr', $arr));
    }
    return $arr;
}
$arr = [1,2,['a','b',['x','y',['k','j']]]];
$string = arrToStr($arr)

输出: 1,2,a,b,x,y,k,j

array_filter() 用回调函数过滤数组中的单元

array_filter()函数,也称为回调函数,是用于使用用户定义的函数来过滤数组的元素。
当使用array_filter()函数未指定回调函数,则它会删除false值返回true值,因此可以过滤数组的FALSE、NULL、空字符串、零0。
示例一 传入回调函数,返回奇数
示例二 不传回调函数,返回结果等于true的值

function odd($var)
{
    return($var & 1);
}
$array = array_filter( ["a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5], "odd");
$entry = array_filter([0 => 'foo', 1 => false, 2 => -1, 3 => null, 4 => '', 5=> 0]);

输出:
Array ( [a] => 1 [c] => 3 [e] => 5)
Array ( [0] => foo [2] => -1)

array_count_values() 统计数组元素出现的次数

原数组的值作为Key,出现的次数作为值。作为一个新关联数组返回

$color = ['red', 'blue', 'green', 'red', 'blue', 'blue'];
$count = array_count_values($color);

输出:
Array ( [red] => 2 [blue] => 3 [green] => 1 )

array_unique() 剔除重复数据

$color = ['red', 'blue', 'green', 'red', 'blue', 'blue'];
$unique = array_unique($color);

输出:
Array ( [0] => red [1] => blue [2] => green )

array_flip() 交换数组的键和值

$fruit = ['apple' => 'red', 'banana' => 'yellow'];
$flip = array_flip($fruit);

输出:
Array ( [red] => apple [yellow] => banana )

natsort() 数组自然排序

为了说明什么是自然 排序,使用sort()函数作用对比,相信会一目了然。
sort() 要达到相同的效果必须加指定参数,示例 sort(array, SORT_STRING)

$number = ["number20", "number1", "number10", "number2"];
sort($number);
natsort($number);

输出:
sort(): Array ( [0] => number1 [1] => number10 [2] => number2 [3] => number20 )
natsort(): Array ( [0] => number1 [2] => number2 [1] => number10 [3] => number20 )

array_merge() 合并数组

$merge = array_merge($color, $fruit);

输出:
Array ( [0] => red [1] => blue [2] => green [apple] => red [banana] => yellow )

array_combine 合并两个数组,生成的新数组以数组1作key数组2作值

$mysql_key = ['a', 'b', 'c', 'd', 'e', 'f'];
$mysql_val = [1, 2, 3, 4, 5, 6];
$combine = array_combine($mysql_key, $mysql_val);

Array ( [a] => 1 [b] => 2 [c] => 3 [d] => 4 [e] => 5 [f] => 6 )

array_slice() 截取数组的一部分

截取前3的元素,
截取第3个之后的元素

$combine = ['a', 'b', 'c', 'd', 'e', 'f'];
$slice = array_slice($combine, 0, 3);
$slice2 = array_slice($combine, 3);

输出:
Array ( [a] => 1 [b] => 2 [c] => 3 )
Array ( [d] => 4 [e] => 5 [f] => 6 )

array_intersect() 求数组交集

array_intersect_assoc() 用于求关联数组交集,不同点是array_intersect_assoc要求键也必须一致

$intersect = array_intersect(['GZ', 'BJ', 'TJ'] , ['SH', 'SZ', 'GZ']);

输出:
Array ( [0] => GZ )

array_diff() 求数组差集

与 array_intersect() 函数功能相反
array_diff_assoc 求关联数组差集

$diff = array_diff(['GZ', 'BJ', 'TJ'] , ['SH', 'SZ', 'GZ']);

输出:
Array ( [1] => BJ [2] => TJ )

shuffle() 随机打乱数组排序

$mysql_key = ['a', 'b', 'c', 'd', 'e', 'f'];
 shuffle($mysql_key);

输出:
Array ( [0] => e [1] => a [2] => b [3] => f [4] => c [5] => d )

array_sum() 数组求和

$mysql_val = [1, 2, 3, 4, 5, 6];
$sum =  array_sum($mysql_val);

输出: 21

array_column() 返回二维数组中指定的一列

array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。

$records = [
    ['id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe',],
    ['id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith',],
    ['id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones',]
];
$first_names = array_column($records, 'first_name');
print_r($first_names);

输出:
Array ( [0] => John[1] => Sally[2] => Jane )

PHP 的一些函数组合

计算二维数组某个值出现的次数

5出现的次数

$list = [
            ['id' => 1, 'userId' => 5],
            ['id' => 2, 'userId' => 5],
            ['id' => 3, 'userId' => 6],
        ];
$userId = 5;
array_count_values(array_column($list, 'userId'))[$userId];

输出: 2

对二维数组排序

参数 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。
原理,使用array_column() 从$list数组取出 count字段组成一维数组,把此数组放入 array_multisort()第一个参数,使用DESC对其排序,第二个数组里的项目(key)对应第一个数组后也进行了排序。打印 $list,输出处理后的结果

$list = [
    ['city' => '郑州', 'count' => 5],
    ['city' => '武汉', 'count' => 12],
    ['city' => '成都', 'count' => 8],
];
array_multisort(array_column($list, 'count'), SORT_DESC, $list);

输出:
Array(
[0] => Array ( [city] => 武汉[count] => 12 )
[1] => Array ( [city] => 成都 [count] => 8 )
[2] => Array ( [city] => 郑州[count] => 5 )
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值