数组能够在单独的变量名中存储一个或多个值
它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。 由于 array 的值可以是其它 array 所以树形结构和多维 array 也是允许的。
key 可以是 integer 或者 string。value 可以是任意类型。
此外 key 会有如下的强制转换:
- String 中包含有效的十进制 int,除非数字前面有一个 + 号,否则将被转换为 int 类型。例如键名 “8” 实际会被储存为 8。另外, “08” 不会被强制转换,因为它不是一个有效的十进制整数。
- Float 也会被转换为 int ,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
- Bool 也会被转换成 int。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
- Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
- Array 和 object 不能 被用为键名。坚持这么做会导致警告:Illegal offset type。
类型转换与覆盖的示例
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
以上例程会输出:
array(1) { [1]=> string(1) “d” }
更多文章: https://www.php.net/manual/zh/language.types.array.php
创建数组array()
函数用于创建数组:
$cars=array(“porsche”,”BMW”,”Volvo”);
可以用短数组语法 [] 替代 array() 。
添加数组
元素的方式,对于数字下标数组:
$names[] = ‘ruby’;
分类
1. 索引数组
带有数字索引的数组
2. PHP 关联数组
关联数组是使用您分配给数组的指定键的数组。
- 创建关联数组1
$age=array(“Bill”=>”35”,”Steve”=>”37”,”Elon”=>”43”);
- 创建关联数组2
$age[‘Bill’]=”63”; $age[‘Steve’]=”56”; $age[‘Elon’]=”47”;
- 遍历关联数组
foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; }
3. 多维数组
- 包含一个或多个数组的数组
数组基础函数
- count()
函数用于返回数组的长度(元素数):
遍历数组
$cars=array(“porsche”,”BMW”,”Volvo”);
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo “
“;
}
- is_array():判断是否为数组
- list()
list() 实际上是语言结构,不是函数。
把数组中的值赋给一些变量:
<?php
$my_array = array("Dog","Cat","Horse");
list($a, $b, $c) = $my_array;
echo "I have several animals, a $a, a $b and a $c.";
?>
数组可用函数
in_array() 函数 array_search()
standard 区分大小写
<?php
$people = array("Bill", "Steve", "Mark", "David");
if (in_array("Mark", $people)){
echo "匹配已找到";
} else {
echo "匹配未找到";
}
?>
inarray(_search,array,type)
search | 必需。规定要在数组搜索的值。 |
---|---|
array | 必需。规定要搜索的数组。 |
type | 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。 |
如果给定的值search存在于数组array中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。
如果没有在数组中找到参数,函数返回 false。
注释:如果 search 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。
array_search(value,array,strict)
array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,则返回匹配该元素所对应的键名。如果没找到,则返回 false。注意在 PHP 4.2.0 之前,函数在失败时返回 null 而不是 false。同样如果第三个参数 strict 被指定为 true,则只有在数据类型和值都一致时才返回相应元素的键名。
isset() /array_key_exists()
当数据量比较大的时候,用 array_key_exists 比较合适。据测试 array_key_exist 要比 in_array 效率高十几甚至几十倍。
php中有两个函数用来判断数组中是否包含指定的键,分别是array_key_exists和isset
array_key_exists语法如下
array_key_exists($key, $array)
该函数是判断某个数组array中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。 提示:请记住,如果您指定数组的时候省略了键名,将会生成从 0 开始并且每个键值对应以 1 递增的整数键名。
如果键存在返回true isset函数语法如下
isset($array[$key])
如果键存在返回true
演示代码如下:
<?php
$array= array("Zero"=>"PHP", "One"=>"Perl", "Two"=>"Java");
print("Is 'One' defined? ".array_key_exists("One", $array)."\n");
print("Is '1' defined? ".array_key_exists("1", $array)."\n");
print("Is 'Two' defined? ".isset($array["Two"])."\n");
print("Is '2' defined? ".isset($array[2])."\n");
?>
返回结果如下:
Is ‘One’ defined? 1
Is ‘1′ defined?
Is ‘Two’ defined? 1
Is ‘2′ defined?
unset/array_values删除元素/重新索引使用
https://www.runoob.com/w3cnote/php-delete-an-element-from-an-array.html
<?php
$arr = array(1=>'one',2=>'two',3=>'three');
//删除下标为2的元素
unset($arr[2]); //将得到Array(1=>'one',3=>'three')
//使用array_values()重新建立索引
$aar = array_values($arr); //$aar = array(0=>'one',1=>'three')
?>
reset()
reset() 函数将内部指针指向数组中的第一个元素,并输出。
相关的方法:
- current()- 返回数组中的当前元素的值
- end()- 将内部指针指向数组中的最后一个元素,并输出
- next()- 将内部指针指向数组中的下一个元素,并输出
- prev()- 将内部指针指向数组中的上一个元素,并输出
- each() - 返回当前元素的键名和键值,并将内部指针向前移动 ```php <?php$people = array(“Bill”, “Steve”, “Mark”, “David”);
echo current($people) . “
“;// Bill
echo next($people) . “
“; // Steve
echo reset($people); // Bill
?>
<a name="UEYBY"></a>
## array_pop()
删除数组中的最后一个元素
```php
$a=array("red","green","blue");
// 必需。规定数组。
array_pop($a);
// 返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。
print_r($a);
array_push() 尾部添加
尾部添加元素,返回数组新的单元总数。
语法格式如下:
int array_push ( array &$array , mixed $var [, mixed $… ] )
参数 array 为指定的数组,参数 $var 为压入数组中的值。
$array_push = array("PHP中文网","百度一下");//定义数组
array_push($array_push,"搜狗浏览器","火狐浏览器");//添加元素
print_r($array_push);// 输出数组结果
// PHP中文网 百度一下 搜狗浏览器 火狐浏览器
array_unshift() 头部添加
用于向数组插入新元素。新数组的值将被插入到数组的开头。
被加上的元素作为一个整体添加,这些元素在数组中的顺序和在参数中的顺序一样。
该函数会返回数组中元素的个数。
提示:您可以插入一个或多个值。
注释:数值键名将从 0 开始,以 1 递增。字符串键名将保持不变。
$names = ['andy', 'tom', 'jack'];
array_unshift($names, 'joe', 'hank');
print_r($names);
// joe hank andy tom jack
array_splice
array_splice(array,offset,length,array)
参数 描述
array 必需。规定数组。
offset 必需。数值。如果 offset 为正,则从输入数组中该值指定的偏移量开始移除。如果 offset 为负,则从输入数组末尾倒数该值指定的偏移量开始移除。
length 可选。数值。如果省略该参数,则移除数组中从 offset 到 结尾的所有部分。如果指定了 length 并且为正值,则移除这么多元素。如果指定了 length 且为负值,则移除从 offset 到数组末尾倒数 length 为止中间所有的元素。
array 被移除的元素由此数组中的元素替代。如果没有移除任何值,则此数组中的元素将插入到指定位置。
案例一、
<?php
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,0,2,$a2);
print_r($a1);
?>
Array ( [0] => Tiger [1] => Lion [2] => Horse [3] => Bird )
案例二、
<?php
$a1=array(0=>"Dog",1=>"Cat");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,1,0,$a2);
print_r($a1);
?>
输出:
Array ( [0] => Dog [1] => Tiger [2] => Lion [3] => Cat )
implode() 函数
把数组元素组合为一个字符串:
separator | 可选。规定数组元素之间放置的内容。默认是 “”(空字符串)。 |
---|---|
array | 必需。要组合为字符串的数组。 |
<?php
$arr = array('Hello','World!','Beautiful','Day!');
echo implode(" ",$arr);
?>
// Hello World! Beautiful Day!
array_column
https://www.w3school.com.cn/php/func_array_column.asp
arraycolumn(_array,column_key,index_key);
参数 | 描述 |
---|---|
array | 必需。规定要使用的多维数组(记录集)。 |
column_key | 必需。需要返回值的列。 可以是索引数组的列的整数索引,或者是关联数组的列的字符串键值。 该参数也可以是 NULL,此时将返回整个数组(配合 index_key 参数来重置数组键的时候,非常有用)。 |
index_key | 可选。用作返回数组的索引/键的列。 |
array_combine
通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值:
<?php
$fname =array("Bill","Steve","Mark");
$age =array("60","56","31");
$c =array_combine($fname,$age);
print_r($c);
?>
Array ( [Bill] => 60 [Steve] => 56 [Mark] => 31 )
array_merge
array_merge() 函数把一个或多个数组合并为一个数组。
提示:您可以向函数输入一个或者多个数组。
注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。
注释:如果您仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引(参见下面的实例 1)。
<?php
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge($a1,$a2));
?>
Array ( [a] => red [b] => yellow [c] => blue )
array_map
https://www.php.net/manual/zh/function.array-map.php
<?php
function cube($n)
{
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
?>
去重
array_unique去重后, 不会重新索引
<?php
function FetchRepeatMemberInArray($array) {
// 获取去掉重复数据的数组
$unique_arr = array_unique ( $array );
// 获取重复数据的数组
$repeat_arr = array_diff_assoc ( $array, $unique_arr );
return $repeat_arr;
}
// 测试用例
$array = array (
'apple',
'iphone',
'miui',
'apple',
'orange',
'orange'
);
$repeat_arr = FetchRepeatMemberInArray ( $array );
print_r ( $repeat_arr );
?>
排序
简单排序
$data = array(5,8,1,7,2);
sort($data);
print_r($data);
rsort($data);// 函数对数组元素进行从高到低的倒排
关键字key排序
$data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");
ksort($data);
print_r($data);
asort() 函数对关联数组按照键值进升序排序。
提示:请使用 arsort() 函数对关联数组按照键值进行降序排序。
提示:请使用 ksort() 函数对关联数组按照键名进行升序排序。
提示:请使用 krsort() 函数对关联数组按照键名进行降序排序。
按数组里某个字段排序
$aList=json_decode("[ { \"end_date\": \"2021-12-10\", \"start_date\": \"2022-12-06\", \"passenger_fee\": 1 } ]",true);
usort($aList, 'sortByStartDate');
function sortByStartDate($a, $b): int {
if ($a['start_date'] > $b['start_date']) {
return 1;
} else {
return -1;
}
}
foreach ($aList as $aData) {
var_dump($aData['start_date']);
}
更多排序
https://www.cnblogs.com/sandea/p/5634294.html
注意
1. foreach参数不能为空
$empty = array();
$empty['222'] = 2;
foreach($empty['222'] as $_){
echo "$_<br/>";
}
Warning: Invalid argument supplied for foreach() in /Users/didi/workspace/test/test3.php on line 21