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