创建数组
索引数组 :键无特殊意义,自动分配键值,从0开始
$arr = array("春","夏","秋","冬");
print_r($arr); // Array ( [0] => 春 [1] => 夏 [2] => 秋 [3] => 冬 )
关联数组 :键本身具有一定的意义,人工分配,如age – 年龄
$arr = array("name"=>"小张", "age"=>"18");
print_r($arr); // Array ( [name] => 小张 [age] => 18 )
多维数组 :多维数组是包含一个或多个数组的数组。
$arr = array(0=>"a", 1=>array("小张"=>"18", "小李"=>array("age"=>18,"gender"=>"男")));
print_r($arr); // Array ( [0] => a [1] => Array ( [小张] => 18 [小李] => Array ( [age] => 18 [gender] => 男 ) ) )
键的规则
键是唯一的
- 键可以是整数 也可以是字符串
// 浮点数会自动转为 整数 如:2.5会转为2
// 字符串整数会自动转为整数 如:"2"会转为2
- 如果不声明键,自动分配键值,从0开始
$arr = array("春","夏","秋","冬");
print_r($arr); // Array ( [0] => 春 [1] => 夏 [2] => 秋 [3] => 冬 )
- 如果已经存在某一个或几个数字键(包括字符串类数字),则从最大的数字键递增生成数字键
$arr = array(3=>"春","夏","秋","冬");
print_r($arr); // Array ( [3] => 春 [4] => 夏 [5] => 秋 [6] => 冬 )
$arr = array("3"=>"春","夏","秋","冬");
print_r($arr); // Array ( [3] => 春 [4] => 夏 [5] => 秋 [6] => 冬 )
$arr = array(2=>"春","夏",5=>"秋","冬");
print_r($arr); // Array ( [2] => 春 [3] => 夏 [5] => 秋 [6] => 冬 )
$arr = array(2=>"春",1=>"夏","秋","冬");
print_r($arr); // Array ( [2] => 春 [1] => 夏 [3] => 秋 [4] => 冬 ) 体现了几个数字键 从最大的键开始递增
$arr = array("春","x"=>"夏","秋","冬");
print_r($arr); // Array ( [0] => 春 [x] => 夏 [1] => 秋 [2] => 冬 )
操作数组单元
增删改查
$arr = array("a","b","c");
// 增1个单元
$arr[] = "d";
$arr[99] = "e";
$arr["stu"] = array("zy","hl");
print_r($arr); // Array ( [0] => a [1] => b [2] => c [3] => d [99] => e [stu] => Array ( [0] => zy [1] => hl ) )
// 读取单元值
echo $arr[3]; // d
echo $arr["stu"][1]; // hl
// 改单元值
$arr[0] = "A";
print_r($arr); // Array ( [0] => A [1] => b [2] => c [3] => d [99] => e [stu] => Array ( [0] => zy [1] => hl ) )
// 删除某个单元
unset($arr["0"]);
print_r($arr); // Array ( [1] => b [2] => c [3] => d [99] => e [stu] => Array ( [0] => zy [1] => hl ) )
遍历数组
对于索引数组 因为键是 0.1.2…的递增的 直接用for循环
$arr = array("a","b","c","d");
for ($i=0; $i<count($arr); $i++){ // count($arr)获取数组长度
echo $arr[$i],"<br>"; // abcd
}
对于关联数组 用foreach循环
// 循环取出每一个单元的键和值赋给$key和$value($key和$value只是起变量的作用可以随便改)
$arr = array("name"=>"zy", "age"=>18, "gender"=>"man");
foreach ($arr as $key=>$value){
echo $key,"~",$value,"<br>";
}
// 如果只想遍历取value值 可以简化写法
foreach ($arr as $value){ // $value写成 $a都行,只是一个变量
echo $value;
}
// 练习 使用 foreach 将数组的值变为原来2倍
$arr = array("a"=>3,"b"=>5,"c"=>6);
foreach ($arr as $key=>$value){
$arr[$key] = $value*2;
}
print_r($arr); // Array ( [a] => 6 [b] => 10 [c] => 12 )
数组指针操作
数组指针操作相关函数 current next end prev reset each
// current()函数 返回当前指针指向的数组单元的值
$arr = array("a","b","c","d");
echo current($arr);
// next()函数 将指针往后移一个单元
next($arr);
echo current($arr);
// end()函数 将指针指向数组中的最后一个单元
end($arr);
echo current($arr);
// prev()函数 将指针指往前移一个单元
prev($arr);
echo current($arr);
// reset()函数 将指针指向数组中的第一个单元(复位)
reset($arr);
echo current($arr);
使用while配合数组函数遍历数组
while ($z = current($arr)){
echo $z,"<br>";
next($arr);
}
但是碰到 false/0 等情况就会出问题
$arr = array(1,2,3,false,4,5,6);
while ($z = current($arr)){ // 括号里是个赋值操作
echo $z,"<br>"; // 1 2 3 后边不会输出 因为 $z=false
next($arr);
}
each() 函数返回当前元素的键名和键值,并将指针向后移动。
each() 函数在 PHP 7.2.0 中被弃用了。
查询数组的元素数
- count() 函数返回数组中元素的数目
$arr = array(1,2,3,4);
echo count($arr);
查询某个键或值是否存在
- array_key_exists() 函数检查某个数组中是否存在指定的键名
- 如果键名存在则返回 true,如果键名不存在则返回 false
if (array_key_exists("c", $arr)){
echo "存在";
}else{
echo "不存在";
}
- in_array() 函数搜索数组中是否存在指定的值
if (in_array(null, $arr)){
echo "null存在";
}else{
echo "null不存在";
}
更多数组函数 link
- array_push() 函数向数组尾部插入一个或多个元素,并返回操作后数组的长度
- array_pop() 函数删除数组中的最后一个元素,并返回删除的元素
- array_unshift() 函数向数组头部插入一个或多个元素,并返回操作后数组的长度
- array_shift() 函数删除数组中的第一个元素,并返回删除的元素
$arr = array("a", "b", "c", "d");
echo array_push($arr, "e"),"<br>"; // 5 向数组尾部插入一个或多个元素,并返回操作后数组的长度。
echo array_pop($arr),"<br>"; // e 删除数组中的最后一个元素,并返回删除的元素
echo array_unshift($arr, "z"),"<br>"; // 5 向数组头部插入一个或多个元素,并返回操作后数组的长度。
echo array_shift($arr); // // z 删除数组中的第一个元素,并返回删除的元素