本文目錄一覽:
PHP中用hash實現的數組
PHP中使用最多的非Array莫屬了,那Array是如何實現的?在PHP內部Array通過一個hashtable來實現,其中使用鏈接法解決hash衝突的問題,這樣最壞情況下,查找Array元素的複雜度為O(N),最好則為1.
而其計算字符串hash值的方法如下,將源碼摘出來以供查備:
複製代碼
代碼如下:
static
inline
ulong
zend_inline_hash_func(const
char
*arKey,
uint
nKeyLength)
{
register
ulong
hash
=
5381;
//此處初始值的設置有什麼玄機么?
/*
variant
with
the
hash
unrolled
eight
times
*/
for
(;
nKeyLength
=
8;
nKeyLength
-=
8)
{
//這種step=8的方式是為何?
hash
=
((hash
5)
+
hash)
+
*arKey++;
hash
=
((hash
5)
+
hash)
+
*arKey++;
hash
=
((hash
5)
+
hash)
+
*arKey++;
hash
=
((hash
5)
+
hash)
+
*arKey++;
//比直接*33要快
hash
=
((hash
5)
+
hash)
+
*arKey++;
hash
=
((hash
5)
+
hash)
+
*arKey++;
hash
=
((hash
5)
+
hash)
+
*arKey++;
hash
=
((hash
5)
+
hash)
+
*arKey++;
}
switch
(nKeyLength)
{
case
7:
hash
=
((hash
5)
+
hash)
+
*arKey++;
/*
fallthrough…
*/
//此處是將剩餘的字符hash
case
6:
hash
=
((hash
5)
+
hash)
+
*arKey++;
/*
fallthrough…
*/
case
5:
hash
=
((hash
5)
+
hash)
+
*arKey++;
/*
fallthrough…
*/
case
4:
hash
=
((hash
5)
+
hash)
+
*arKey++;
/*
fallthrough…
*/
case
3:
hash
=
((hash
5)
+
hash)
+
*arKey++;
/*
fallthrough…
*/
case
2:
hash
=
((hash
5)
+
hash)
+
*arKey++;
/*
fallthrough…
*/
case
1:
hash
=
((hash
5)
+
hash)
+
*arKey++;
break;
case
0:
break;
EMPTY_SWITCH_DEFAULT_CASE()
}
return
hash;//返回hash值
}
ps:對於以下函數,仍有兩點不明:
hash
=
5381設置的理由?
這種step=8的循環方式是為了效率么?
php裡面怎麼新建數組?
php裡面新建數據可以通過兩種方式,一種是通過array函數來創建,另一種就是通過賦值[]來創建。
?php
$arr1 = array(1,2,3,4);
var_dump($arr1);
$arr2[0] = 1;
$arr2[1] = 2;
$arr2[2] = 3;
$arr2[3] = 4;
var_dump($arr2);
php 如何定義一個數組
php中定義數組的方法:
1、PHP定義數組的格式:
數組名=array();
如:$aa=array();//這樣就定義了一個數組,
之後給元素賦值:
$aa[0]=”9016″;
$aa[1]=”9017″;
$aa[2]=”9018″;
2、PHP輸出數組的方法:
foreach($aa as $val)
{
echo$val;
}
也可以在定義數組時直接賦值
$aa=array(0=”9016″,1=”9017″;2=”9018″);
3、PHP的數組還可以用字符做下標,不一定要數字:
$aa[“name”]=”Joan”;
$aa[“num”]=”9018″;
$aa[“email”]=”abc@abc.com”;
也可以這樣
$aa=array(“name”=”joan”,”num”=”9018″,”email”=”abc@abc.com”);
將一個一維數組的元素也定義為數組,就是一個二維數組,
$aa=array(0=”a1″,1=”a2″);
$bb=array(0=”b1″,1=”b2″);
$cc=array(0=$aa;1=$bb);此時,$cc[0]也是一個數組,$cc[1]也是一個數組,$cc就是一個二維數組。
同理,三維,四維數組也可以繼續定義下去。
4、數組的元素不僅於數字和字符串,可以是類的對象。
原創文章,作者:YWFA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140718.html