php數組聲明、遍曆、數組全域變數使用小結

來源:互聯網
上載者:User

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=aaa@bbb.com&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', 'aaa@bbb.com'),
array(2, '120', 'bbb@ccc.com'),
array(3, '119', 'ccc@ddd.com')
)
);
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);
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.