目录结构:php
在这篇文章中,笔者将会介绍PHP中数组的使用,以及一些注意事项。以前笔者已经说过PHP是一门弱语言类型,所以php中的数组使用也比较灵活。数组
建立数组的方式有好几种,好比:函数
<?php //格式: //$数组变量名[索引值]=资料内容 $foos[0] = "hello "; $foos[1] = "world "; //格式: //array( [key =>] value , ... ) //key 能够是 integer 或者 string。value 能够是任意类型。 $foos = array(prefix => "hello ",suffix => "world "); $foos = array(0 => "hello ",suffix => "world "); //也能够不用指定键(key) $foos = array("hello ","world "); //建立多维数组 //格式: //array( // array(...), // array(...), // array(...), // ...); //下面建立一个2行,第一行为1,2,3,4,5,6,第二行为1,2,3,4,5,6,7的二维数组。 $flat = array( row1 => array(1,2,3,4,5,6), row2 => array(1,2,3,4,5,6,7) ); ?>
在使用array(...)的形式建立数组时,其中key会有以下的强制转化要求:
1.包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。可是 "08" 则不会强制转换,由于其不是一个合法的十进制数值。
2.浮点数会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
3.布尔值会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
4.Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
5.数组和对象不能被用为键名。坚持这么作会致使警告:Illegal offset type。
除此以外使用array(...)定义数组还有以下特性:
1.若是对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。若是指定的键名已经有了值,则该值会被覆盖.
2.若是在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,以前的都被覆盖了。spa
PHP中容许删除整个数组,同时也容许删除某一个键/值对。
好比:.net
<?php echo "begin\n"; $foos = array("how","are","you"); echo("counts = ".count($foos)."\n"); foreach ($foos as $f){ echo($f."\n"); } unset($foos); echo("counts = ".count($foos)."\n"); for($i = 0; $i <= count($foos); $i++){ echo($foos[$i]."\n"); } echo("finish\n"); ?>
输出结果为:设计
begin
counts = 3
how
are
you
counts = 0
finish
上面展现了在删除整个数组后,数组的数量就变成0了。接下笔者将会演示只删除其中某一个键/值对,以及须要注意的地方。指针
<?php $arr = array("how","are","you"); print_r($arr); print("----------------\n"); //清除键为1的键/值对 unset($arr[1]); print_r($arr); ?>
输出结果以下:code
Array
(
[0] => how
[1] => are
[2] => you
)
----------------
Array
(
[0] => how
[2] => you
)
经过这个结果能够看出,当使用unset()删除其中某一个键/值对时候,其他的键不会自动调整编号。很是容易理解这种设计,由于array本质上就是按照键/值对进行存储的,删除其中一对键/值对,就改变其余键/值对的话,确定不符合常理,而且有些键更本就不能按照数值大小(字符串)排序。那么有没有一种常规的排序方法,可以在删除数组中的某一键/值对后,只把以数值为键的键值对从0升序排列呢?答案是确定的,array_multisort(...)就能完成这样的功能。对象
<?php $arr = array("how","are","dot"=>",","you"); print_r($arr); print("----------------\n"); //清除键为1的键/值对 unset($arr[1]); array_multisort($arr); print_r($arr); ?>
输出结果:blog
Array
(
[0] => how
[1] => are
[dot] => ,
[2] => you
)
----------------
Array
(
[dot] => ,
[0] => how
[1] => you
)
经过输出结果能够看出,以字符串为键的键/值对保留了下来,以数值为键的键/值对被从新排序。
上面说过,PHP中数组的使用很是灵活,一样能够用于模拟栈结构。栈结构具备“先进后出”的特色。数组中提供了array_push和array_pop方法。
array_push在尾部添加元素。
array_pop从尾部弹出一个元素。
例如:
<?php $arr = Array(); array_push($arr, "how"); print("push \"how\" into array\n"); array_push($arr, "are"); print("push \"are\" into array\n"); array_push($arr, "you"); print("push \"you\" into array\n"); print("------------------------\n"); print("pop \"".array_pop($arr)."\" from array\n"); print("pop \"".array_pop($arr)."\" from array\n"); print("pop \"".array_pop($arr)."\" from array\n"); ?>
输出结果为:
push "how" into array
push "are" into array
push "you" into array
------------------------
pop "you" from array
pop "are" from array
pop "how" from array
PHP中提供了许多数组处理函数,下面笔者列举一些经常使用的:
array each( array array) 返回 array 数组中当前指针位置的键/值对并向前移动数组指针
void list ( mixed ...) 经过一个操做给一组变量赋值
array_shift 将数组开头的单元移出数组
array_unshift 在数组开头插入一个或多个单元
array_combine 建立一个数组,用一个数组的值做为其键名,另外一个数组的值做为其值
array_merge 合并一个或多个数组
array_splice 把数组中的一部分去掉并用其它值取代
参考文章: