PHP 數(shù)組的底層主要是通過 HashTable 實(shí)現(xiàn),HashTable 通過映射函數(shù)或者散列函數(shù)將 String Key 轉(zhuǎn)換成一個(gè)普通的數(shù)字下標(biāo),然后再將 Value 值存儲到下標(biāo)對應(yīng)的數(shù)組元素中
10多年的麻栗坡網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整麻栗坡建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“麻栗坡網(wǎng)站設(shè)計(jì)”,“麻栗坡網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
HashTable 主要包含兩部分:1.存儲元素的數(shù)組 2.散列函數(shù)或者映射函數(shù)
隨機(jī)訪問
如果我們指定一個(gè) Key=Value 的映射關(guān)系,Key 是一個(gè) String 類型的,則先通過 Time 33 算法將 String 轉(zhuǎn)換成一個(gè) Int 整型,然后再通過 PHP 里面特定的散列算法映射成 Bucket 數(shù)組中的一個(gè)下標(biāo),將 Value 值存儲到對應(yīng)的下標(biāo)元素中,當(dāng)我們通過 Key 訪問數(shù)組元素時(shí),只需要再通過相同的算法計(jì)算出對應(yīng)的 Key,就能實(shí)現(xiàn)隨機(jī)訪問數(shù)組元素
順序訪問
存儲在 HashTable 中的數(shù)組是無序的,但是 PHP 中的數(shù)組是有序的,為了實(shí)現(xiàn) HashTable 的有序性,PHP 引入了一個(gè)中間映射表,該表是一個(gè)大小和 Bucket 數(shù)組相同的數(shù)組,數(shù)組中存放的是整形數(shù)據(jù),主要用于存放元素實(shí)際存儲的 Value 的下標(biāo)值,當(dāng)引入中間映射表之后,Bucket 中的數(shù)據(jù)是有序的,而中間映射表中的數(shù)據(jù)是無序的,當(dāng)我們順序訪問的時(shí)候只需要遍歷 Bucket 中的數(shù)據(jù)即可
Hash 沖突
PHP 解決 Hash 沖突采用的是鏈地址法,將出現(xiàn)沖突的 Bucket 串成鏈表,這樣通過中間映射表映射出來的就不再是一個(gè)元素而是一個(gè)鏈表,通過散列函數(shù)定位到對應(yīng)的 Bucket 鏈表時(shí),需要遍歷鏈表,逐個(gè)對比 key 值,直至找出對應(yīng)的目標(biāo)值
PHP 實(shí)現(xiàn)擴(kuò)容
1.當(dāng)刪除的元素所占比例超出閾值的時(shí)候,則需要移除已經(jīng)被邏輯刪除的 Bucket,將后面的 Bucket 補(bǔ)位到前面,因?yàn)?Bucket 的下標(biāo)發(fā)生了變動,所以需要更新每元素在中間映射表中實(shí)際存儲的下標(biāo)值
2.當(dāng)沒有超出閾值的時(shí)候,PHP 會申請一個(gè)大小是原來兩倍的新數(shù)組,并將舊數(shù)組中的數(shù)據(jù)復(fù)制到新數(shù)組中,因?yàn)閿?shù)組長度發(fā)生了變化,所以 key-value 的映射關(guān)系需要重新計(jì)算,這個(gè)就是重建索引
從數(shù)據(jù)庫讀出來的原始數(shù)據(jù)是資源。還不是數(shù)組。
$result = mysql_Query("select * from tb_admin where parid=1")
while($list = mysql_fetch_array($result)){
print_r($list);//這里輸出的數(shù)組是將原數(shù)組拆開來輸出。
}
原始的數(shù)據(jù)結(jié)構(gòu)應(yīng)是:
array(
[0]=array(
[id]=01
[classname]=我是
[url]=baidu.com
)
[1]=array(
//這里同上,不兩累贅
)
)
隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)更簡單,就像我們生活中排隊(duì)一樣,它的特性是先進(jìn)先出(FIFO)。
PHP
SPL中SplQueue類就是實(shí)現(xiàn)隊(duì)列操作,和棧一樣,它也可以繼承雙鏈表(SplDoublyLinkedList)輕松實(shí)現(xiàn)。
SplQueue類摘要如下:
SplQueue簡單使用如下:
復(fù)制代碼
代碼如下:
$queue
=
new
SplQueue();
/**
*
可見隊(duì)列和雙鏈表的區(qū)別就是IteratorMode改變了而已,棧的IteratorMode只能為:
*
(1)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_KEEP
(默認(rèn)值,迭代后數(shù)據(jù)保存)
*
(2)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE
(迭代后數(shù)據(jù)刪除)
*/
$queue-setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE);
//SplQueue::enqueue()其實(shí)就是
SplDoublyLinkedList::push()
$queue-enqueue('a');
$queue-enqueue('b');
$queue-enqueue('c');
//SplQueue::dequeue()其實(shí)就是
SplDoublyLinkedList::shift()
print_r($queue-dequeue());
foreach($queue
as
$item)
{
echo
$item
.
PHP_EOL;
}
print_r($queue);
而優(yōu)先隊(duì)列SplPriorityQueue是基于堆(后文介紹)實(shí)現(xiàn)的。
SplPriorityQueue的類摘要如下:
SplPriorityQueue簡單使用:
$pq
=
new
SplPriorityQueue();
$pq-insert('a',
10);
$pq-insert('b',
1);
$pq-insert('c',
8);
echo
$pq-count()
.PHP_EOL;
//3
echo
$pq-current()
.
PHP_EOL;
//a
/**
*
設(shè)置元素出隊(duì)模式
*
SplPriorityQueue::EXTR_DATA
僅提取值
*
SplPriorityQueue::EXTR_PRIORITY
僅提取優(yōu)先級
*
SplPriorityQueue::EXTR_BOTH
提取數(shù)組包含值和優(yōu)先級
*/
$pq-setExtractFlags(SplPriorityQueue::EXTR_DATA);
while($pq-valid())
{
print_r($pq-current());
//a
c
b
$pq-next();
}
1、索引數(shù)組
有兩種創(chuàng)建索引數(shù)組的方法:
索引是自動分配的(索引從 0 開始):
$cars=array("porsche","BMW","Volvo");
2、關(guān)聯(lián)數(shù)組
關(guān)聯(lián)數(shù)組是使用您分配給數(shù)組的指定鍵的數(shù)組。
有兩種創(chuàng)建關(guān)聯(lián)數(shù)組的方法:
$age=array("Bill"="35","Steve"="37","Elon"="43");
擴(kuò)展資料
實(shí)用函數(shù)——
有相當(dāng)多的實(shí)用函數(shù)作用于數(shù)組,參見數(shù)組函數(shù)一節(jié)。
注: unset() 函數(shù)允許取消一個(gè)數(shù)組中的鍵名。要注意數(shù)組將不會重建索引。
?php
$a = array( 1 = 'one', 2 = 'two', 3 = 'three' );
unset( $a[2] );
/* 將產(chǎn)生一個(gè)數(shù)組,定義為
$a = array( 1='one', 3='three');
而不是
$a = array( 1 = 'one', 2 = 'three');
*/
$b = array_values($a);
// Now $b is array(0 = 'one', 1 ='three')
?
foreach 控制結(jié)構(gòu)是專門用于數(shù)組的。它提供了一個(gè)簡單的方法來遍歷數(shù)組。
本文小編為大家詳細(xì)介紹“php數(shù)組的元素可不可以是數(shù)字”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“php數(shù)組的元素可不可以是數(shù)字”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
php數(shù)組的元素可以是數(shù)字。因?yàn)镻HP是弱數(shù)據(jù)類型的編程語言,所以PHP中的數(shù)組可以存儲任意多個(gè)、任意類型的數(shù)據(jù),即數(shù)組元素的類型沒有限制,可以是數(shù)字(整數(shù)和浮點(diǎn)數(shù))、字符串、布爾值、數(shù)組、Object對象等類型。
?
本教程操作環(huán)境:windows7系統(tǒng)、PHP8.1版、DELL G3電腦
php數(shù)組的元素可以是數(shù)字。
數(shù)組是 PHP 中最重要的數(shù)據(jù)類型之一,在 PHP 中的應(yīng)用非常廣泛。因?yàn)?PHP 是弱數(shù)據(jù)類型的編程語言,所以 PHP 中的數(shù)組變量可以存儲任意多個(gè)、任意類型的數(shù)據(jù),并且可以實(shí)現(xiàn)其他強(qiáng)數(shù)據(jù)類型中的堆、棧、隊(duì)列等數(shù)據(jù)結(jié)構(gòu)的功能。
簡單來說,PHP數(shù)組元素的類型沒有限制,可以是數(shù)字、字符串、布爾值、數(shù)組、Object對象等類型。
示例1:索引數(shù)組
?php
header("Content-type:text/html;charset=utf-8");
$arr= array(1,2,"3",4,0.5,"hello",TRUE,3.14);
var_dump($arr);
?
?
說明:索引數(shù)組的下標(biāo)(鍵名)由數(shù)字組成,默認(rèn)從 0 開始,每個(gè)數(shù)字對應(yīng)一個(gè)數(shù)組元素在數(shù)組中的位置,不需要特別指定,PHP 會自動為索引數(shù)組的鍵名賦一個(gè)整數(shù)值,然后從這個(gè)值開始自動遞增。
示例2:關(guān)聯(lián)數(shù)組
?php
header("Content-type:text/html;charset=utf-8");
$arr=array(1=1,"a"=3.5,2=2,"b"=0,"c"="blue");
var_dump($arr);
?
?
說明:關(guān)聯(lián)數(shù)組的下標(biāo)(鍵名)由數(shù)值和字符串混合的形式組成,如果一個(gè)數(shù)組中有一個(gè)鍵名不是數(shù)字,那么這個(gè)數(shù)組就是關(guān)聯(lián)數(shù)組。
php中的數(shù)字
在php中,數(shù)字可分為integer(整型)和float(浮點(diǎn)型)
類型 功能
integer(整型) 整型包含所有的整數(shù),可以是正數(shù)也可以是負(fù)數(shù)
float(浮點(diǎn)型) 浮點(diǎn)型也是用來表示數(shù)字的,與整型不同除了可以表示整數(shù)外它還可以用來表示小數(shù)和指數(shù)
1)整型
在 PHP 中,整型變量稱為 integer 或 int 類型,用來表示一個(gè)整數(shù),整型的規(guī)則如下所示:
整型必須至少有一個(gè)數(shù)字(0~9);
整型不能包含逗號或空格;
整型不能包含小數(shù)點(diǎn);
整型可以是正數(shù)或負(fù)數(shù)。
整型的取值范圍必須介于 -2E31 到 2E31 之間,可以用三種格式來表示,即十進(jìn)制、十六進(jìn)制(以 0x 為前綴)和八進(jìn)制(以 0 為前綴)。
?php
$x = 5985; // 定義一個(gè)整型數(shù)據(jù)類型的變量
var_dump($x); // 輸出此變量
$x = -345;
var_dump($x);
$x = 0x8C; //十六進(jìn)制數(shù)字
var_dump($x);
$x = 047; //八進(jìn)制數(shù)字
var_dump($x);
?
?
注意,在 PHP7 版本中,含有十六進(jìn)制字符的字符串不再被視為數(shù)字,而是當(dāng)作普通的字符串。
2)浮點(diǎn)型
浮點(diǎn)型在 PHP 中被稱為 float 類型,也可稱為實(shí)數(shù),可以用來存儲整數(shù)和小數(shù),有效的取值范圍是 1.8E-308 到 1.8E+308 之間。浮點(diǎn)數(shù)的精確度比整型數(shù)據(jù)類型要高。
?php
$num1 = 10.365;
$num2 = 2.4e3;
$num3 = 8E-5;
var_dump($num1, $num2, $num3);
?
?
讀到這里,這篇“php數(shù)組的元素可不可以是數(shù)字”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。