PHP 中数组有两种模式:索引数组和关联数组。索引数组使用数字作为键,
创新互联建站主要从事网站制作、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务滨海,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
而关联数组则使用字符串作为键。 打印数组 print_r() var_dump() var_export();
使用 list 函数将元素值返回至变量
//使用 list 函数
list($name, $age, $gender) = array('张三', 33, '男');
//输出元素值的变量
echo $name.'的性别是:'.$gender.',今年'.$age.'岁';
//只获取姓名和性别
list($name,,$gender) = array('张三', 33, '男')
元素值的增减
1.第一种增加数组元素值的方法:数组名+[] = 元素值,即可在数组尾部增加一个元
素值。
//原数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//在数组尾部添加一个元素值
$phone[] = 'OPPO'; //或$phone['R9'] = 'OPPO'实现关联数组元素增加
2.使用 array_unshift 函数从数组头部增加元素值
//在头部添加元素值,数值索引将重新计算,字符串索引保持不变
array_unshift($phone, 'OPPO', '金立');
3.使用 array_push 函数从数组尾部增加元数值
//在尾部添加元素值,类似$phone[] = 'OPPO'
array_push($phone, 'OPPO', '金立');
4.使用 array_shift 函数从数组头开始删除
//从数组开头删除一个元素值,数值索引重新计算,字符串索引不变
array_shift($phone);
5.使用 array_pop 函数从数组结尾开始删除
//从数组结尾删除一个元素值
array_pop($phone);
6.使用 array_splice 函数删除或插入元素值
//从位置 2(第三个元素开始),删除 3 个
array_splice($phone, 2, 3);
//从位置 2(第三个元素开始),删除至末尾
array_splice($phone, 2);
元素值的遍历
大多数情况下,我们需要将数组里所有的数据遍历出来,再按照指定的格式:比如二维
表格的形式展现出来。此时,我们需要一些带有循环能力的语句。
1.foreach 遍历
//最推荐常用的遍历方式
foreach ($phone as $key=>$value) {
echo $key.'|'.$value.'
';
}
2.for 循环
//这种只能遍历数值索引数组,字符串索引没有 key
for ($i = 0; $i < 6; $i++) {
echo $phone[$i].'
';
}
数组判断操作
1.使用 in_array 函数可以判断一个元素是否在这个数组中。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//判断元素值为三星是否在数组中
echo in_array('三星', $phone);
2.使用 array_key_exists 函数可以判断键值或索引是否存在这个数组中。
//数组
$computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
//判断键值为联想的元素是否在数组中
echo array_key_exists('联想', $computer);
3.使用 array_search 函数可以搜索元素值的索引值。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//返回搜索的键
echo array_search('三星', $phone);
数组转换操作
1.使用 array_keys 函数可以返回数组中的索引,并组成一个新数组。
//数组
$computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
//提取索引并当作元素组成新数组
$keys = array_keys($computer);
//输出
var_export($keys);
2.使用 array_values 函数返回所有元素值并重新生成一个数值索引数组。
//数组
$computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
//提取元素值并创建新数组
$values = array_values($computer);
//输出
var_export($values);
数组拆合操作
1.使用 array_chunk 函数分组数组。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//每两个分一组,组成多维数组
$chunk = array_chunk($phone, 2);
//打印测试
print_r($chunk);
2.使用 array_merge 函数组合数组。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//数组 2
$computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
//整合两个数组
$array = array_merge($phone, $computer);
//打印输出
print_r($array);
3.使用 array_combine 函数合并数组。
//数组 1
$computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
//数组 2
$phone = array('苹果', '华为', '三星');
//取数组 1 的值作为键,取数组 2 的值作为元素值,然后合并
$array = array_combine($computer, $phone);
//打印输出
print_r($array);
4.使用 array_intersect 函数返回数组中的交集。
//数组 1
$color1 = array('a'=>'green', 'red', 'blue');
//数组 2
$color2 = array('b'=>'green', 'yellow', 'red');
//返回交集并创建新数组
$array = array_intersect($color1, $color2);
//打印输出
print_r($array);
5.使用 array_diff 函数返回数组的差集。
//数组 1
$color1 = array('a'=>'green', 'red', 'blue');
//数组 2
$color2 = array('b'=>'green', 'yellow', 'red');
//返回差集,并建立新数组
$array = array_diff($color1, $color2);
//打印
print_r($array);
数组计算操作
1.使用 count/sizeof 函数可以返回数组的元素个数。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//得到数组的元素个数
echo count($phone);
//多维数组
$price = array(
array('小米 8', 100, 2999),
array('iphone9 plus', 50, 7999),
array('锤子 x', 10, 3999)
);
//递归统计
echo count($price, 1);
2.使用 array_pad 函数填充数组。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//向右填充两位,数组本身 6 位
$array = array_pad($phone, 8, '占位');
//打印查看
print_r($array);
//负数,可以在左边填充
$array = array_pad($phone, -8, '占位');
3.使用 array_fill 函数给定的值填充数组。
//创建索引从 3 开始,4 个值为 banana 的数组
$array = array_fill(3, 4, 'banana');
//输出
var_export($array);
4.使用 array_sum 函数求出数组所有值的和。
//数值数组
$num = array(1, 2, 3, 4, 5, 6);
//求和
echo array_sum($num);
5.使用 array_product 函数返回数组所有数值的乘积。
//数组
$num = array(1, 2, 3, 4, 5, 6);
//求乘积
echo array_product($num);
6.使用 array_unique 函数移出数组中重复的值。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子', '苹果');
//移除重复的值
$array = array_unique($phone);
//输出
var_export($array);
7.使用 array_flip 函数将键和值对调。
//数组
$computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
//交换键和值
$array = array_flip($computer);
//输出
var_export($array);
8.使用 array_rand 函数从数组中随机取出一个或多个元素值。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//随机返回索引
$keys = array_rand($phone);
//输出
var_export($keys);
//随机取出两个
$keys = array_rand($phone, 2);
9.使用 array_count_values 函数统计所有的值出现的次数。
//数组
$phone = array('苹果', '华为', '三星', '三星', '魅族', '魅族');
//统计
$count = array_count_values($phone);
//输出
var_export($count);
10.使用 array_column 函数返回数组中指定的一列。
//多维数组
$grade = array(
array(
'数学'=>95,
'语文'=>92,
'英语'=>97
),
array(
'数学'=>99,
'语文'=>95,
'英语'=>92
),
array(
'数学'=>92,
'语文'=>95,
'英语'=>93
),
);
//返回语文一列
$chinese = array_column($grade, '语文');
//输出
var_export($chinese);
数组迭代操作
1.使用 each 函数获取当前数组指针定位的键值对,并让指针向下一个位置移动一步。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//获取第一个位置的键值对,并将指针下移
list($key, $value) = each($phone);
//打印第一个位置的键值对
echo $key.'-'.$value;
//获取第二个位置的键值对,并将指针下移
list($key, $value) = each($phone);
//打印第二个位置的键值对
echo $key.'-'.$value;
2.使用 current 函数返回当前数组指针指向的元素值。
//数组
$phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
//获取当前指针的元素值
$one = current($phone);
//获取当前指针的元素值,注:并不会下移指针
$two = current($phone);
//输出
echo $one;
//输出
echo $two;
3.使用 next 函数将数组指针移动至下一位。
//获取一位元素值
$one = current($phone);
//指针下移一位
next($phone);
//获取下一位元素值
$two = current($phone);
next
4.使用 prev 函数将指针移动至上一位。
//往上一位移动
prev($phone);
5.使用 reset 函数将指针移至第一位。
//移至第一位
reset($phone)
6.使用 end 函数将指针移至末尾。
//移至末尾
end($phone);
7.使用 key 函数返回当前指针元素的键。
//移至末尾
key($phone)
数组排序操作
1.使用 sort 函数对数组进行从低到高排序。(按值排序,并重新分配索引)
//数组
$array = array('green', 'red', 'orange', 'blue');
//对源数组进行排序
sort($array);
//打印
print_r($array);
$sort_flags 值较多,我们一一解释一下:
(1).SORT_REGULAR - 正常比较单元(不改变类型,默认值)
1.如果是字符串,会按照首字母从低到高顺序排列;
2.如果是数值,会按照数字从小到大排列,如果其中是数值字符串,不影响;
3.如果是中文字符,在 GBK 的情况下,会按照中文字符的拼音排序,如果是
UTF8,则需要进行一些转换,这里暂时不深入探讨。
(2).SORT_STRING - 单元被作为字符串来比较
//数组
$array = array(2, 12);
//按字符串模式排序
sort($array, SORT_STRING);
//输出
print_r($array);
(3).SORT_NUMERIC - 单元被作为数字来比较
//数组
$array = array('2', '12');
//按数字排序
sort($array, SORT_NUMERIC);
//输出
print_r($array);
(4).SORT_NATURAL 自然排序,SORT_FLAG_CASE 和自然排序合并,实现不区分
大小写排序。
//数组
$array = array('Apple1', 'apple2', 'Apple3', 'apple4');
//不区分大小写
sort($array, SORT_NATURAL | SORT_FLAG_CASE);
//输出
print_r($array);
2.使用 rsort 函数对数组进行从高到低排序。(按值排序,并重新分配索引)
//数组
$array = array('green', 'red', 'orange', 'blue');
//对源数组进行排序
sort($array);
//打印
print_r($array);
3.使用 usort 实现自定义排序。(按值排序,并重新分配索引)
//数组
$array = array(7, 3, 5, 9, 1, 4, 2);
//自定义排序
usort($array, function ($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
});
//输出
print_r($array);
4.asort、arsort、uasort 函数对应上面三个函数的功能,只不过不会重新分配索引。
//数组
$array = array('green', 'red', 'orange', 'blue');
//从低到高排序,但不改变索引
asort($array);
//输出
print_r($array);
5.ksort、krsort、kasort 函数对应上面三个函数的功能,只不过对键进行排序。
//数组
$array = array('x'=>'green', 'j'=>'red', 'b'=>'orange', 'h'=>'blue');
//对键进行从低到高排序
ksort($array);
//输出
print_r($array);
6.使用 shuffle 函数对数组进行随机排序。
//数组
$array = array('green', 'red', 'orange', 'blue');
//实现随机排序
shuffle($array);
//输出
print_r($array);
7.使用natsort实现自然排序,使用natcasesort函数实现不区分大小写的自然排序。
//数组
$array = array('demo8.php', 'demo1.php', 'demo10.php', 'demo5.php');
//自然排序
natsort($array);
//输出
print_r($array);
8.使用 array_reverse 函数实现翻转数组并重新生成。
//数组
$array = array('green', 'red', 'orange', 'blue');
//翻转数组并返回翻转的数组
$reverse = array_reverse($array);
//输出
var_export($reverse);
数组函数补齐
1.使用 compact 函数将变量和值整合成数组。
//变量和值
$name = 'Mr.Lee';
$age = 33;
$job = 'teacher';
//整合成数组
$result = compact('name', 'age', 'job');
//输出
var_export($result)
2.使用 extract 函数将数组的键值解析变量和值。
//数组
$info = array('name'=>'Mr.Lee', 'age'=>33, 'job'=>'teacher');
//解析成变量
extract($info);
//输出变量
echo $name.$age.$job;
3.使用 array_change_key_case 返回字符串键名为小写或大写的数组。
//数组
$color = array('Red'=>'apple', 'Orange'=>'banana');
//转换键名为默认小写并返回新数组
$array = array_change_key_case($color);
//输出
var_export($array);
4.使用 array_filter 函数过滤元素值。
//数组
$color = array('red', 'blue', 'orange', 'green', 'yellow');
//回调函数进行判断过滤
$array = array_filter($color, function ($value) {
if ($value != 'green') {
return $value;
}
});
//输出
var_export($array);
5.使用 array_map 函数处理元素值。
//数组
$num = array(1, 2, 3, 4, 5);
//对元素值进行逐个处理
$array = array_map(function ($n) {
return $n * $n * $n;
}, $num);
//输出
print_r($array);
//多个数组
$num = array(1, 2, 3, 4, 5);
$enlish = array('one', 'two', 'three', 'four', 'five');
//回调函数为 null,可以合并两个数组
$array = array_map(null, $num, $enlish);
//输出
print_r($array);
6.使用 array_reduce 函数迭代的处理元素值简化为单一值。
//数组
$num = array(1, 2, 3, 4, 5);
//迭代处理
$total = array_reduce($num, function ($v, $w) {
$v += $w;
return $v;
});
//输出
echo $total;
7.使用 array_replace 函数替换数组元素。
//数组
$color = array('red', 'blue', 'orange', 'green');
//替换的数组
$replacements = array(0=>'yellow');
//执行替换并生成新数组
$array = array_replace($color, $replacements);
//输出
var_export($array);
8.使用 array_walk 函数可以通过回调函数自定义数组中每个元素值。
//数组
$color = array('red', 'blue', 'orange', 'green');
//更改数组中的元素值
array_walk($color, function (&$value) {
if ($value == 'orange') {
$value = 'yellow';
}
});
//数组
print_r($color)