php教程數組聲明,遍歷,數組全局變量
<?php
/*
* 一、數組的概述
* 1.數組的本質:管理和操作一組變量,成批處理
* 2.數組時復合類型(可以存儲多個)
* 3.數組中可以存儲任意長度的數據,也可以存儲任意類型的數據
* 4.數組可以完成其他語言數據結構的功能(鏈表,隊列,棧,集合類)
*
*
*
* 二、數組的分類
* 數組中有多個單元,(單元稱為元素)
* 每個元素(下標[鍵]和值)
* 單訪問元素的時候,都是通過下標(鍵)來訪問元素
* 1.一維數組,二維數組,三維數組。。。多維數組
* (數組的數組,就是在數組中存有其他的數組)
* 2.PHP中有兩種數組
* 索引數組:就是下標是順序整數的索引
* 關聯數組:就是下標是字符串作為索引
*
* 下標(整數,字符串)只有這兩種
*
*
* 三、數組多種聲明方式
*
* 1.直接為數組元素賦值聲明
* 如果索引下標不給出,就會從0開始順序索引
* 如果給出索引下標,下一個就會從最大的開始增1
* 如果後面出現前面的下標,如果是賦值就是為前面的元素重新賦值
* 混合聲明時,索引和關聯不互相影響(不影響索引下標的聲明)
*
* 2.使用array()函數聲明
* 默認是索引數組
* 如果為關聯數組和索引數組指定下標,使用 鍵=>值
* 多個成員之間使用" , "分割
* 3.使用其他的函數聲明
*
*
*
*
*/
//索引數組
$user[0]=1;//用戶序號
$user[1]="zhangsan";//用戶名
$user[2]=10;//年齡
$user[3]="nan";//性別
echo '<pre>';
print_r($user);
echo '</pre>';
//關聯數組
$user["id"]=1;
$user["name"]="zhangsan";
$user["age"]=10;
$user["sex"];
$user["age"]=90;//賦值
echo $user["name"];//輸出
//使用array()聲明數組
$user=array(1,"zhangsan",10,"nan");
//使用array()聲明關聯數組
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
//聲明多維數組(多條記錄),來保存一個表中的多條用戶信息記錄
$user=array(
//用$user[0]調用這一行,比如調用這條記錄中的姓名,$user[0][1]
array(1,"zhangsan",10,"nan"),
//用$user[1]調用這一行,比如調用這條記錄中的姓名,$user[1][1]
array(2,"lisi",20,"nv")
);
//數組保存多個表,每個表有多條記錄
$info=array(
"user"=>array(
array(1,"zhangsan",10,"nan"),
array(2,"lisi",20,"nv")
),
"score"=>array(
array(1,90,80,70),
array(2,60,40,70)
)
);
echo $info["score"][1][1];//輸出60,
?>
數組超級全局變量
<?php
/* 預定義數組:
* 自動全局變量---超全局數組
*
* 1.包含了來自WEB服務器,客戶端,運行環境和用戶輸入的數據
* 2.這些數組比較特別
* 3.全局范圍內自動生效,都可以直接使用這些數組
* 4.用戶不能自定義這些數組,但這些數組的操作方式和自己定義的數組操作的方式一樣
* 5.在函數中直接可以使用這些數組
*
* $_GET //經由URL請求提交至腳本的變量
* $_POST //經由HTTP POST 方法提交到腳本的變量
* $_REQUEST //經由GET , POST和COOKIE機制提交 到腳本的變量
* $_FILES //經由http post方法文件上傳而提交至腳本的變量
* $_COOKIE
* $_SESSION
* $_ENV //執行環境提交至腳本的變量
* $_SERVER //變量由WEB服務器設定的,或直接和當前腳本的執行環境相關聯
* $GLOBALS //只要是當前腳本有效的變量都在這裡,數組的鍵名為全局腳本的名稱
*
*
*/
//超全局數組在函數內部可以直接調用
$arr=array(10,20);//一般數組
$_GET=array(50,90);//超全局數組
function demo(){
global $arr;//調用全局變量要先包含
print_r($arr);
print_r($_GET);//直接調用超全局數組不用包含
}
?>
<!-- **********頁面傳值get請求*************** -->
<?php
//直接把傳的值當變量用,當php.ini配置文件中register_global=on時有用。
echo $username."<br>";
echo $email."<br>";
echo $page."<br>";
//最穩定的取值方法
echo $_GET["username"]."<br>";
echo $_GET["email"]."<br>";
echo $_GET["page"]."<br>";
?>
<a href="demo.php?username=zhangsan&[email protected]&page=45">this is a $_GET test</a>
<!-- ***********頁面傳值post請求**************** -->
<form action="demo.php" method="post">
username:<input type="text" name="uname" /> <br/>
password:<input type="password" name="pass" /> <br/>
<input type="submit" value="login" /> <br />
</form>
<?php
print_r($_GET);//不能接收到
print_r($_POST);//這樣才能接收到
?>
<?php
//$_ENV的使用
echo'<pre>';
print_r($_ENV);
echo'</pre>';
//顯示當前環境
// 也可以單個遍歷
?>
<?php
//利用$GLOBALS超全局數組在函數內部調用全局變量
$a=100;
$b=200;
$c=300;
function demo()
{
//直接調用全局變量
echo $GLOBALS["a"]."<br>";
echo $GLOABLS["b"]."<br>";
echo $GLOABLS["c"]."<br>";
}
?>
數組遍歷
<?php
/* 數組的遍歷
*
* 1.使用for語句循環遍歷數組
* 1.其他語言(只有這一種方式)
* 2.PHP中這種方式不是首選的方式
* 3.數組必須是索引數組,而且下標必須是連續的。
* (索引數組下標可以不連續,數組還有關聯數組,這兩種不能遍歷)
*
* 2.使用foreach語句循環遍歷數組
* foreacho(數組變量 as 變量值){
* //循環體
* }
* 1.循環次數由數組的元素個數決定
* 2.每一次循環都會將數組中的元素分別賦值給後面變量
*
* foreach(數組變量 as 下標變量=> 值變量){
* }
*
*
* 3.while() list() each() 組合循環遍歷數組
*
* each()函數:
* 1.需要一個數組作為參數
* 2.返回來的也是一個數組
* 3.返回來的數組是0,1,key,value四個下標(固定的)
* 0和key下標是當前參數數組元素的鍵
* 1和value下標是當前參數數組元素的值
* 4.默認當前元素就是第一個元素
* 5.每執行一次後就會將當前元素向後移動
* 6.如果到最後的元素再執行這個函數,則返回false
* list()函數:
* 1. list()=array();需要將一個數組賦值給這個函數
* 2.數組中的元素個數,要和list()函數中的參數個數相同
* 3.數組中的每個元素值會賦值list()函數中的每個參數,list()將每個參數轉為變量
* 4.list()只能接受索引數組
* 5.按索引的下標順序來給參數賦值
*
*
*
*/
//for語句遍歷數組
$user=array(1,"zhangsan",40,"nan");
for($i=0;$i<4;$i++)
{
echo"$user[{$i}]=".$user[$i]."<br>";
}
//使用foreach
$user=array(1,"zhangsan",40,"nan");
foreach($user as $val)//$val是自定義變量
{
echo $val."<br>";//輸出與下標無關
}
foreach($user as $key=>$val)//$val $key 都是自定義變量
{
echo $key."=====>".$val."<br>";
}
//foreach遍歷多維數組
$info=array(
"user"=>array(
//$user[0]
array(1, "zansan", 10, "nan"),
//$user[1][1]
array(2, "lisi", 20, "nv"), //$user[1]
//$user[2]
array(3, "wangwu", 30, "nan")
),
"score"=>array(
array(1, 100, 90, 80),
array(2, 99, 88, 11),
array(3, 10, 50, 88)
),
"connect"=>array(
array(1, '110', '[email protected]'),
array(2, '120', '[email protected]'),
array(3, '119', '[email protected]')
)
);
foreach($info as $tableName=>$table)
{
echo '<table align="center" width="500" border="1">';
echo '<caption><h1>'.$tableName.'</h1></caption>';
foreach($table as $row)
{
echo '<tr>';
foreach($row as $col)
{
echo '<td>'.$col.'</td>';
}
echo '</tr>';
}
echo '</table>';
}
//each()的使用
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
$a=each($user);//Array ( [1] => 1 [value] => 1 [0] => id [key] => id ) 默認是第一個元素的值
print_r($a);
$b=each($user);
print_r($b);//Array ( [1] => zhangsan [value] => zhangsan [0] => name [key] => name ) 每執行一次,向後遍歷一個
$c=each($user);
print_r($c);//Array ( [1] => 10 [value] => 10 [0] => age [key] => age )
$d=each($user);
print_r($d);//Array ( [1] => nan [value] => nan [0] => sex [key] => sex )
$e=each($user);
var_dump($e);//bool(false) 當沒有元素時,返回的值
//each()配合while遍歷
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
while($arr=each($user))
{
//echo $arr[0]."====>".$arr[1]."<br>";//通過0,1 來顯示 鍵(下標) 和 值
echo $arr["key"]."===>".$arr["value"]."<br>";//通過key,value 來顯示 鍵 值
}
//list()函數的使用
list($name,$age,$sex)=array("zhangsan",10,"nnnnn");
echo $name."<br>";
echo $age."<br>";
echo $sex."<br>";
//另一種使用方法
list(,,$sex)=array("zhangsan",10,"nnnnn");
echo $sex."<br>";//只把性別轉換為變量
//ip判斷
$ip="192.168.1.128";
list(,,,$d)=explode(".",$ip);//explode表示用 . 來分隔,並返回一個數組
echo $d;//取出128
//list()只能接收索引數組的例子
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
list($key,$value)=each($user);//Array( [1]=>1 [0]=>id) 按照索引下標的順序給list中的參數賦值,所以先是 0鍵 然後是 1值
echo $key."--->".$value;
//while list() each() 組合使用
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
while(list($key,$value)=each($user))
{
echo $key."--->".$value."<br>";
}
//多次循環只顯示一次的解決方法
//使用數組的內部指針控制函數
//next(數組);數組指針移動到下一個
//prev(數組);數組指針移動到上一個
//reset(數組);數組指針移動到第一個(復位)
//end(數組);數組指針移動到最後一個
//current(數組);獲取當前元素的值,當前元素時指數組指針指向的元素。
//key(數組);獲取當前元素的鍵值(下標)
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
while(list($key,$value)=each($user))
{
echo $key."--->".$value."<br>";
}
//在這裡將數組指針移動到第一個以下循環就能輸出
//reset($user)
while(list($key,$value)=each($user))//因為each()到最後一個返回false,所以循環直接跳出
{
echo $key."--->".$value."<br>";
}
while(list($key,$value)=each($user))//因為each()到最後一個返回false,所以循環直接跳出
{
echo $key."--->".$value."<br>";
}
echo current($user)."=====>".key($user);
?>