【PHP】解析PHP中的数组

目录结构:php

contents structure [-]

在这篇文章中,笔者将会介绍PHP中数组的使用,以及一些注意事项。以前笔者已经说过PHP是一门弱语言类型,所以php中的数组使用也比较灵活。数组

1.建立数组

建立数组的方式有好几种,好比:函数

<?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

2.删除数组

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
)

经过输出结果能够看出,以字符串为键的键/值对保留了下来,以数值为键的键/值对被从新排序。

3.栈结构

上面说过,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

4.经常使用的数组处理函数

PHP中提供了许多数组处理函数,下面笔者列举一些经常使用的:
array each( array array)   返回 array 数组中当前指针位置的键/值对并向前移动数组指针
void list ( mixed ...)  经过一个操做给一组变量赋值
array_shift 将数组开头的单元移出数组
array_unshift 在数组开头插入一个或多个单元
array_combine 建立一个数组,用一个数组的值做为其键名,另外一个数组的值做为其值
array_merge 合并一个或多个数组
array_splice 把数组中的一部分去掉并用其它值取代

参考文章:

http://php.net/