php怎样解析数组,PHP 数组 Array 解析
官方介紹
PHP 數組實際上是一個有序的映射(map),映射是一種把多個值(values)關聯到對應的多個鍵(keys)的類型。這種映射類型在很多方面做了優化,因此可以把它當成真正的數組(就是上面說的其它編程語言的數組),或列表(向量)(list(vector)),散列表(hashTable),字典(dict),集合(collection),棧(stack),隊列(queue)以及更多的可能,這些都是比較常用的數據結構。由于數組的元素值又可以是一個數組,因此樹形結構和多維數組也是被允許的。當然,如果同學們想了解更多關于數據結構的知識,建議購買 C語言描述《數據結構與算法》一書,在這里筆者就不做過多介紹了。
數組鍵(key)的約定
PHP數組的鍵(key)可以是整型或者字符串類型,而值(value)可以是任意類型。
如果你給數組的鍵不是整型或者字符串類型,則PHP會在內部對鍵的進行類型轉換(Type Casting),通過下面的代碼示例我們來看下 PHP 是如何進行數組鍵的類型轉換的。
//1.?合法的整數字符串會被轉換成對應的整數鍵,必須滿足「/\-?[1-9]\d*/」或者「/0/」正則的整數字符串才會被轉換
$array1?=?["10"=>"PHP技術大全"];//被轉換:鍵從字符串"10"轉換成整型10
//$array1?=?["+10"=>"PHP技術大全"];//不被轉換
//$array1?=?["-10"=>"PHP技術大全"];//被轉換:鍵從字符串"-10"轉換成整數-10
//$array1?=?["-0"=>"PHP技術大全"];//不被轉換
//$array1?=?["10.1"=>"PHP技術大全"];//不被轉換:這種包含小數的字符串是不會轉換的,僅限整型
//$array1?=?["010"=>"PHP技術大全"];//不被轉換:這種不是合法的整型也是不會轉換的
//2.?浮點類型的鍵也會被轉換成整型,小數部分將被舍棄
$array2?=?[12.3=>"PHP技術大全"];//鍵從浮點數12.3到12
//$array2?=?[-12.3=>"PHP技術大全"];//鍵從浮點數-12.3到-12
//3.?布爾類型的鍵也會被轉換成整型,true轉換為1,false轉換為0
$array3?=?[true=>"PHP技術大全",false=>"微信公眾號"];//轉換為[1=>"PHP技術大全",0=>"微信公眾號"]
//4.?null的鍵會被轉換為""(空字符串)
//5.?其它類型不能作為數組鍵,否則會導致?PHP?報錯:?"Warning:Illegal?offset?type"
數組常見用法
1. 給數組末尾追加值
$array[] = "value";,請不要使用array_push($array,"value");,因為前者性能會高出很多而且語法簡潔。
2. list 訪問數組值
list($v1,$v2,$v3) = ["key1"=>"value1","key2"=>"value2"];,這樣就很快給變量賦值了。
3. 訪問字符串的指定位置的字符
$str = "Welcome to follow me!"; echo $str[0];//output:W,但是字符串并非數組,這里只是 PHP 提供的便捷訪問字符串中的字符的一種方式
4. 完全刪除數組中指定索引的元素
$array = ["hello","hi","nihao"]; unset($array[0]);,這里要注意最好得到的是[1=>"hi",2=>"nihao"]而不是[0=>"hi",1=>"nihao"],另外,我們不能對字符串指定索引的字符進行unset,例如$demoStr="hello";unset($demoStr[1]);會導致報錯并且不會產生任何效果
5. 訪問忘記給數組鍵加引號訪問數組
$array = ["hi"=>"hello"]; echo $array[hi]; $array[nihao]="你好";,由于 hi 和 nihao 都忘記添加引號,因此 PHP 會報 E_NOTICE 級別的通知錯誤,會但在生產環境下通常 notice 的報錯通常會被隱藏,但是呢,PHP 還是會默默地在背后給你做一件事,那就是把定義兩個常量:define("hi","hi");define("nihao","nihao");,但是錯誤信息還是持續報出來(實現設置error_reporting(E_ALL);):「PHP Notice: Use of undefined constant nihao」
強制轉換為數組類型
1. 可以對整數,浮點數,字符串,布爾,資源(resource)類型進行強制轉換,轉換結果示例:
$someType = 1;
$someTypeArray = (array)$someType;//轉換結果:$anyTypeArray = [$someType]
2. 將一個object對象轉換成數組會比較神奇,規則如下:
若為 public 則對象屬性名就會成為數組的鍵;
若為 protected 則對象屬性名就會在前面帶上一個 null()字符,然后接上一個 * 字符,最后在對象屬性前面增加一個 null 字符,于是就組合對應的數組鍵;
若為 private 則對象屬性名會在前面帶上一個 null 字符,然后接上最后一次集成的屬性所屬的類名,接著又是一個 null 字符,于是就組合成了對應的數組鍵;
示例如下:
class?O{
private?$A?=?1;
private?$f;
}
class?A?extends?O{
protected?$A;
}
class?B?extends?A{
protected?$A;
public?$c;
}
var_dump((array)new?B());
//輸出結果如下,規律還是比較明顯的:
/*
array(6)?{
["\0*\0A"]=>
NULL
["c"]=>
NULL
["\0*\0D"]=>
NULL
["\0O\0f"]=>
NULL
["\0*\0c1"]=>
NULL
["\0O\0A"]=>
int(1)
}
*/
數組元素的修改
我們可以使用 PHP 引用的來對數組進行修改,代碼示例:
$array?=?[1,2,3];
foreach($array?as?$k=>?&$number){//在?$number?前面加了&(引用符號)
//接下來修改?$number?的值將會對?$array?元素值產生改變
}
//上面的代碼實際相當于做了下面的操作
$number?=?&$array[$k];
//接下來修改?$number?將會對?$array?產生影響
最佳實踐
1. PHP 數組包含很多實用的函數,請參考[數組函數](PHP: Array Functions - Manual),記憶一些百利而無一害;
2. PHP 數組通常關系著系統的性能,所以在定義函數的時候,如果數組參數能夠傳引用就可以減少性能損耗,因為有時候數組參數會比較大;
總結
以上是生活随笔為你收集整理的php怎样解析数组,PHP 数组 Array 解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php嵌套 frame,终极解决禁止网站
- 下一篇: php中按引用传递参数,如何通过PHP中