PHP基础之数组

来源:互联网 发布:xp如何网络连接打印机 编辑:程序博客网 时间:2024/06/10 21:54

php中的数组其实就是一个有序的数据映射,也就是把values值关联到keys的一种数据类型。由于数组元素的值也可以是另外一个数组,所以树形结构和多维数组也是允许的。

php中数组可以同过array()进行定义。它接受任意数量用逗号分割的key=>value键值对。

语法格式:

$arrays = array(key=>value,

key1=>value1,.....

)

或者

$arrays = array[key=>value,

key1=>value1,.....

]

在php5.4之后array()和array[]是等价的。


其中key值可以是证书,也可以为字符串。value则为任意类型的值。

php中数组也可以分为以下3种类型。

1.数值数组

 //自动分配id即key        $auto_array = array("hello", "world", "everyone");        echo $auto_array[2] . "," . $auto_array[0] . " " . $auto_array[1] . "<br.>";        //手动分配id即key        $stu_array[0] = "LiLi";        $stu_array[1] = "WangChen";        $stu_array[2] = "XiQian";        echo $stu_array[0] . "," . $stu_array[1] . " " . $stu_array[2] . "<br.>";

输出:

everyone,hello worldLiLi,WangChen XiQian

2.关联数组

所谓的关联数组类似数值数组的第二种,只不过是key值是我们自己定义的类型。让我们看下关联数组的定义。

$gl_array1 = array("LiLi" => 35, "WangChen" => 37, "XiQian" => 43);        echo "LiLi's age is:" . $gl_array1['LiLi'] . "<br/>";        echo "WangChen's age is:" . $gl_array1['WangChen'] . "<br/>";        echo "XiQian's age is:" . $gl_array1['XiQian'] . "<br/>";        $gl_array2['LiLi'] = 35;        $gl_array2['WangChen'] = 37;        $gl_array2['XiQian'] = 43;        echo "LiLi's age is:" . $gl_array1['LiLi'] . "<br/>";        echo "WangChen's age is:" . $gl_array1['WangChen'] . "<br/>";        echo "XiQian's age is:" . $gl_array1['XiQian'] . "<br/>";


输出结果是相同的:

LiLi's age is:35WangChen's age is:37XiQian's age is:43



3.多维数组

多维数组其实就是包含一个或者多个一维数组的数组。

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

 $stu_info = array(            "LiLi" => array(                "语文" => 85,                "数学" => 90,                "英语" => 90            ),            "WangChen" => array(                "语文" => 98,                "数学" => 100,                "英语" => 95            ),            "XiQian" => array(                "语文" => 97,                "数学" => 86,                "英语" => 98            )        );        //格式化输出数组        print("<pre>");        print_r($stu_info);        print("</pre>");
输出:

Array(    [LiLi] => Array        (            [语文] => 85            [数学] => 90            [英语] => 90        )    [WangChen] => Array        (            [语文] => 98            [数学] => 100            [英语] => 95        )    [XiQian] => Array        (            [语文] => 97            [数学] => 86            [英语] => 98        ))

让我在上面例子的基础上试着输出以下XiQian的各科成绩:

echo "XiQian :<br/>" . "语文成绩:" . $stu_info['XiQian']['语文']        . "<br/>" . "数学成绩:" . $stu_info['XiQian']['数学'] . "<br/>"        . "英语成绩:" . $stu_info['XiQian']['英语'] . "<br/>";

输出:

XiQian :语文成绩:97数学成绩:86英语成绩:98


上面介绍了数组的定义以及简单使用,下面我们在留意以下数组使用过程中的注意点。

Key的强制转化

1.包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。


2.浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。小伙们注意啊:“9.6”=> 88 这样写此处8会被认为是字符串的。。不是想像中的整型哦。echo $array['9.6'] 会出错的哦。


 $key_array = [            8 => 88,            9.6=>55        ];        echo $key_array['9']."<br/>";        print("<pre>");        print_r($key_array);        print("</pre>");
输出:

55Array(    [8] => 88    [9] => 55)

如果试着写
echo $key_array['9.6']."<br/>";
恭喜你,可以看到这样的提示:



( ! ) Notice: Undefined index: 9.6 in D:\Programs\PHP\PHP_Array\PHP_Array.php on line70Call Stack#TimeMemoryFunctionLocation10.0005357896{main}( )...\PHP_Array.php:0

3.布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。


4.Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。


5.数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

 $key_array = [            8 => 88,            9.6 => 55        ];        $key_array2 = [            $key_array => 88,        ];        print("<pre>");        print_r($key_array2);        print("</pre>");        ?>

输出:


( ! ) Warning: Illegal offset type in D:\Programs\PHP\PHP_Array\PHP_Array.php on line76Call Stack#TimeMemoryFunctionLocation10.0010357992{main}( )...\PHP_Array.php:0

Array()


接下来我们在看看key值被覆盖的情况。

如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

 $array3 = array(            1 => "a",            "1" => "b",            1.5 => "c",            true => "d",        );        var_dump($array3);


输出:

array (size=1)  1 => string 'd' (length=1)

此处定义的键值根据上面提到的规则全部被转化为1,所以此时最后一个key值对是有效的,所以会输出d。


基础知识差不多就这些了,还有一些细节就的小伙伴们自己慢慢在使用中掌握了。接下来我们了解几个数组常用的函数。

1.count

计算数组中的单元数目或者对象中的属性个数。

 $array_count = array(88,77,99);        echo "the count of aray is :".count($array_count)."<br/>";
输出:the count of aray is :3

2.current

返回数组的当前单元。每个数组都有一个内部指针来指向它当前单元,初始的指针指向数组的第一项。

3.next

将数组的内部指针向前移动一位。也就是说该函数的返回值是下一个数组单元的值并将数组指针向前移动一位。如果内部指针指向的下一个单元不从在时,返回false。

$array_count = array(88,77,99);        echo "the count of aray is :".count($array_count)."<br/>";                $var1 = current($array_count);        echo "the current values of aray is :".$var1."<br/>";        $var2 = next($array_count);        $var1 = current($array_count);        echo "the current values of aray is :".$var1."<br/>";

处处:

the count of aray is :3the current values of aray is :88the current values of aray is :77



4.array_search

在数组中搜索指定的值,如果找到则返回相应的键名。

 $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');        $key = array_search('green', $array);        echo $key . "<br/>";

输出:2


好了今天就介绍到这里了。php中的函数很多,没办法一一说明,更重要的是小伙伴们在 学习过程中学会查看php的官方手册。