幻想编程

php学习正式起航(3)

时间:14-03-09 16:31:52点击:273

现在说数组

php数组有3种类型

数值数组 带有数字 ID 键的数组

关联数组 数组中的每个 ID 键关联一个值

多维数组 包含一个或多个数组的数组

关于数组的声明

<?php

$$a[5];

$$a[5]={1,2,3,4,5};

?>

像C语言这种常规的2种在php里是行不通的

php有个关键字array 是用来定义数组的

<?php

$$a=array();

?>

这就是定义了一个空数组,不需要指定长度,里面元素可以动态添加,添加了多少个,这个数组就有多少大,而且可以继续添加,这点很爽哈

<?php

$$a=array();

echo $$a;

?>

这样可以打印a的类型 结果是Array

但是这样的话就会报错

<?php

$$a=array();

echo $$a[0];

?>

因为数组是空的

定义数组主要有两种方法,一种是用array

<?php

$$a=array(1,2,3,4,5);

for($$i=0;$$i<count($$a);$$i++)

echo $$a[$$i]."<br/>";

?>

count关键字可以计算一个数组有多少个元素

还有一种就是

<?php

$$a[0]='a';

$$a[1]='b';

$$a[2]='c';

for($$i=0;$$i<count($$a);$$i++)

echo $$a[$$i]."<br/>";

?>

直接给变量下标赋值,这个变量就自动成为数组了

但是一定要按下标顺序赋值

比如,这样就是错的

<?php

$$a[0]='a';

$$a[1]='b';

$$a[2]='c';

$$a[5]='d';

for($$i=0;$$i<count($$a);$$i++)

echo $$a[$$i]."<br/>";

?>

还有数组里的元素可以不是同一类型

<?php

$$a=array(1,'b',"hello",1.0);

for($$i=0;$$i<count($$a);$$i++)

echo $$a[$$i]."<br/>";

?>

是不是觉得很强大

现在说关联数组

关联数组比普通数组更强大了,下标不需要在用数字,而是自己取名字

这就是一种键对值的关系,跟java的map**很类似

<?php

$$a=array("a"=>1,'b'=>2,"c"=>3);

echo $$a["a"]."<br/>";

echo $$a['b']."<br/>";

echo $$a["c"]."<br/>";

?>

注意是=>不是->,里面的单引号和双引号可以互换

键=>值 键可以重复 但是结果是显示最后那个

<?php

$$a=array("a"=>1,'a'=>2,"c"=>3);

echo $$a["a"]."<br/>";

echo $$a["c"]."<br/>";

?>

打印2 3

还有一种关联数组的定义,就是上面说过的

<?php

$$a["a"]="hello";

$$a["b"]="world";

echo $$a["a"]."<br/>";

echo $$a["b"]."<br/>";

?>

但是下面这样是错误的

<?php

$$a["a"]=>"hello";

$$a["b"]=>"world";

echo $$a["a"]."<br/>";

echo $$a["b"]."<br/>";

?>

另外数字也可以作为键

<?php

$$a["1"]="hello";

$$a["2"]="world";

echo $$a["1"]."<br/>";

echo $$a["2"]."<br/>";

?>

是可行的

不加引号可以输出来,但是php有提示注意,这个不要用

<?php

$$a['a']="hello";

$$a['b']="world";

echo $$a[a]."<br/>";

echo $$a [ b ]";

?>

下面说多维数组

在多维数组中,主数组中的每个元素也是一个数组。在子数组中的每个元素也可以是数组,以此类推

这就是定义了一个多维数组,二维的

<?php

$$a=array(array('a',1,2),array("hello",3,1.1,));

echo $$a[0][0];

?>

按C语言看,就是a[2][3] 不是array有几个就是几维了

同样,多维数组里面的元素也可以是多种类型

而且还可以这样

<?php

$$a=array(array('a',1,2),array("hello",3,1.1,2,'a'));

echo $$a[0][0];

?>

不要求每个子数组的元素个数都一致,这点比C语言爽吧

和普通数组一样,多维数组也可以这样定义,不过我想没人会这样做。。

<?php

$$a[0][0]="hello00";

$$a[0][1]="hello01";

$$a[0][2]="hello02";

$$a[0][3]="hello03";

$$a[1][0]="hello10";

$$a[1][1]="hello11";

$$a[1][2]="hello12";

$$a[1][3]="hello13";

for($$i=0;$$i<2;$$i++){

for($$j=0;$$j<4;$$j++)

echo $$a[$$i][$$j]." "; echo "<br/>";

}

?>

这个二维数组是a[2][4] 2行4列,比较规矩的

注意,只要列的元素数量一致才能用循环打印出,C语言则不需要考虑这句话

还可以定义多维关联数组

<?php

$$a=array('a'=>array('a'=>"hello",'b'=>"world"),'b'=>array('one'=>1,'two'=>2,'three'=>3));

echo $$a['a']['a'];

?>

会打印hello

就看上去是有点晕,因为关联数组里面又是关联的

也可以不用这样,像下面这样就清楚许多

<?php

$$a=array('a'=>array("hello","world"),'b'=>array(1,2,3));

echo $$a['a'][0]."<br/>".$$a['b'][2];

?>

打印出

hello

3

绝对不能这样玩

<?php

$$a=array(array('a'=>"hello",'b'=>"world"),array('one'=>1,'two'=>2,'three'=>3)); echo $$a['a']; ?>

错误的

前面说的都是二维数组,那么三维或以上的怎么定义,很简单

<?php

$$a=array(array(array(1,2,3)));

echo $$a[0][0][0];

?>

打印1

<?php

$$a=array(array(array(1,2,3)),array(array(4,5,6)));

echo $$a[1][0][0];

?>

打印4

<?php

$$a=array(array(array(1,2,3),array(4,5,6)),array(array(7,8,9)));

echo $$a[0][1][1];

?>

打印5

应该有人看着会晕

现在分析一下

比如$$a[0][1][1]; 最右边中括号的元素在数组里表示最里面的

$$a=array(array(array(1,2,3),array(4,5,6)),array(array(7,8,9)));

最大分了3层,最右边中括号的元素就表示最里面的那层

然后往左的中括号就往外一层,以此类推

其实多看看就明白了,分的几层就是几维数组

另外3维数组也不需要了解太透,一般掌握到二维就可以了

前面没详说foreach循环,其实用foreach循环遍历一维数组最好了

<?php

$$a=array(1,"hello",'a');

foreach($$a as $$value)

echo $$value."<br/>";

?>

输出

1

hello

a

是不是很简单

$$value 只是一个临时变量,用来保存数组元素,叫什么名都可以

等于是把一个数组交给代理变量,让它帮着来输出

<?php

$$a=array(1,"hello",'a'); foreach($$a as $$value)

echo $$a."<br/>"; ?>

这样是不会输出数组元素的

只会输出

Array

Array

Array