Benniao が学ぶ php (6) 配列
1. 配列の概要
1.1 配列は複合型です
1.2 配列には、任意の長さと任意のタイプのデータを格納できます
2. 配列の型
2.1 インデックス配列: 添字はインデックスとしての連続した整数です
<?php $user[0] = 1; $user[1] = "zhangsan"; $user[2] = "[email protected]"; echo '<pre class="brush:php;toolbar:false">'; print_r($user); echo '';?>
<?php $user["id"] = 1; $user["name"] = "zhangsan"; $user["email"] = "[email protected]"; echo '<pre class="brush:php;toolbar:false">'; print_r($user); echo ''; $user["name"] = "lisi"; echo $user["name"];?>
3. 配列の複数の宣言方法
3.1 直接代入配列要素への値
a. インデックスの添字が指定されていない場合、順次インデックスは 0 から始まります
b. インデックスの添字が指定されている場合、次のインデックスは最大のものから増加します。 1
c. 前の添字が後で出現する場合、それが代入の場合、前の要素が再割り当てされます
d. 混合宣言を行う場合、インデックスと関連付けは相互に影響しません (宣言インデックス添字の影響を受けません)
3.2 array() 関数を使用します
a. デフォルトはインデックス配列
です。 b. 連想配列とインデックスの場合 配列の添え字を指定するには、key => value
c.
<?php $user1 = array (1, "zhsangsan", 10, "nan", "[email protected]"); echo '<pre class="brush:php;toolbar:false">'; print_r($user1); echo ''; /** Array( [0] => 1 [1] => zhsangsan [2] => 10 [3] => nan [4] => [email protected] ) */ $user2 = array("id"=>1, "name"=>"zhsangsan", "age"=>10, 100=>"nan", "[email protected]"); echo '
'; print_r($user2); echo ''; /** Array( [id] => 1 [name] => zhsangsan [age] => 10 [100] => nan [101] => [email protected] ) */?>
重要な知識ポイント: 2 次元配列
<?php $info=array( "user"=>array( array(1, "zansan", 10, "nan"), array(2, "lisi", 20, "nv") ) ); echo $info["user"][1][1]; // lisi echo '<pre class="brush:php;toolbar:false">'; print_r($info); echo ''; /** Array ( [user] => Array ( [0] => Array ( [0] => 1 [1] => zansan [2] => 10 [3] => nan ) [1] => Array ( [0] => 2 [1] => lisi [2] => 20 [3] => nv ) ) ) */?>
4. 配列トラバーサル
4.1 for ステートメントを使用してループスルーする (非推奨)局限性: 数组必须是索引数组, 而且下标必须是连续的 (然而索引数组下标可以不连续, 数组还可能是关联数组)
<?php $user = array(1, "zhasna", "[email protected]"); for($i = 0; $i < count($user); $i++){ echo "\$user[{$i}]=".$user[$i]."<br>"; } /** $user[0]=1 $user[1]=zhasna $user[2][email protected] */?>
4.2 使用foreach语句循环遍历(强烈推荐)
循环次数由数组的元素个数决定, 每一次循环都会将数组中的元素分别赋值给后面的变量
<?php $user=array(1, "name"=>"zhasna", "age"=>40, 100=>"nan", "[email protected]"); foreach($user as $key => $val){ // $var 是自定义变量, $key自定义变量 echo $key." =====> ".$val."<br>"; } /* 0 =====> 1 name =====> zhasna age =====> 40 100 =====> nan 101 =====> [email protected] */ foreach($user as $val){ // 不要key也可以, 直接遍历$user的值 echo $val."<br>"; } /* 1 zhasna 40 nan [email protected] */?>
4.3 使用while(), list(), each() 组合循环遍历(不推荐)
each() 函数:
* 需要一个数组作为参数
* 返回来的也是一个数组
* 返回来的数组时0, 1, key, value四个下标, 0和key下标是当前数组元素的键, 1和value下标是当前数组元素的值
* 默认当前元素就是第一个元素
* 每执行一次后就会将当前元素向后移动
* 如果已经到了最后还执行这个函数, 则返回false
<?php $user = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan"); while($arr = each($user)){ // echo $arr[0]."==>".$arr[1]."<br>"; echo $arr["key"]." ----> ".$arr["value"]."<br>"; } /** id ----> 1 name ----> zhangsan age ----> 10 sex ----> nan */?>
list() 函数:
* list()=array(); 需要将一个数组赋值给这个函数
* 数组中的元素个数要和list()函数中的参数个数相同
* 数组中的每个元素值会赋值给list()函数中的每个参数,list()将每个参数转为变量
* list()只能接收索引数组
<?php list($name, $age, $sex) = array("zansan", 10, "nnnnn"); echo $name."<br>"; echo $age."<br>"; // list中的值和数组中的值一一对应 echo $sex."<br>"; // 如果不想给name赋值, 那就写成list(, $age, $sex) /* zansan 10 nnnnn */ $user1 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan"); list($key, $value) = each($user1); // Array ( [1] => 1 [0] => id ) echo $key." --> ".$value; /* id --> 1 */ $user2 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan"); while(list($key, $value) = each($user2)){ echo $key." ==> ".$value."<br>"; } /* name ==> zhangsan age ==> 10 sex ==> nan */?>