您的位置:

中实现简单的php数组,php常用的数组函数

本文目录一览:

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、数组的元素不仅于数字和字符串,可以是类的对象。