数组
本页讨论
- php数组是什么?
- 数组排序
- 数组的队列函数,指针操作
- 从文件载入数组
- 数组的经典操作实例(百试不爽)
php数组是什么?
PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
数组的两种类型:
- 索引数组 - 带有数字索引的数组
- 关联数组 - 带有指定键的数组
索引数组 | 关联数组 |
初始化: | 初始化: |
索引是自动分配的(索引从 0 开始): $cars=array("Volvo","BMW","SAAB"); 或者也可以手动分配索引: $cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB"; | $array = [ "foo" => "bar", "bar" => "foo", ]; 或者: $age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43"; |
遍历: | 遍历: |
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo " "; } // Volvo // BMW // SAAB | foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo " "; } // Key= Bill , Value= 35 // Key= Steve , Value= 37 // Key= Peter , Value= 43 |
数组的排序
PHP 数组排序函数:
- sort() - 升序排序
- rsort() - 降序数组
- asort() - 根据值,升序排序
- ksort() - 根据键,升序排序
- arsort() - 根据值,降序排序
- krsort() - 根据键,降序排序
举例:
$numbers= [3,5,1,22,11];
sort($numbers);
// [1,3,5,11,22]
$cars= ["Volvo","BMW","SAAB"];
rsort($cars);
// ["Volvo","SAAB","BMW"]
$age=["Bill"=>"35","Steve"=>"37","Peter"=>"43"];
asort($age);
// ["Bill"=>"35","Steve"=>"37","Peter"=>"43"]
$age=["Bill"=>"35","Steve"=>"37","Peter"=>"43"];
ksort($age);
// ["Bill"=>"35","Peter"=>"43","Steve"=>"37"]
$age=["Bill"=>"35","Steve"=>"37","Peter"=>"43"];
arsort($age);
// ["Peter"=>"43","Steve"=>"37","Bill"=>"35"];
$age=["Bill"=>"35","Steve"=>"37","Peter"=>"43"];
krsort($age);
// ["Steve"=>"37","Peter"=>"43","Bill"=>"35"]
数组的队列函数,指针操作
常用函数
- each() 先返回当前元素,再后移指针
- current() 返回数组中的当前元素。
- end() 返回最后一个元素,并将指针指向最后一个元素。
- reset() 将指针指向第一个元素。
- pos() 返回指针当前的位置
- next() 返回下一个元素,再后移指针
- prev() 返回上一个元素,再前移指针
- array_shift() 删除数组中首个元素,并返回被删除元素的值。
- array_unshift() 在数组开头插入一个或多个元素。
- array_push() 将一个或多个元素插入数组的末尾(入栈)。
- array_pop() 删除数组的最后一个元素(出栈)。
从文件载入数组
file函数:读取整个文件,每行作为一个元素载入到数组。
$data = file("pathto/data.txt");
数组的经典操作实例
反向遍历数组
$value = end($arr);
while($value) {
echo $value;
$value = prev($arr);
}
用list遍历数组
$staff = array(
array("小张","男",24),
array("小王","女",25),
array("小李","男",23)
);
while(list($keys, $value) = each($staff)) {
list($name, $sex, $age) = $value;
echo $name . $sex . $age;
}
以指定长度分割数组
function array_paginate($array, $length) {
$arr = [];
if(count($array) < $length) {
$arr[] = $array;
} else {
for ($i=0; $i < ceil(count($array)/$length); $i++) {
$arr[] = array_slice($array, $length*($i), $length);
}
}
return $arr;
}