php数组

创建数组

索引数组 :键无特殊意义,自动分配键值,从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 删除数组中的第一个元素,并返回删除的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值