首页 / 网页编程 / PHP / 第五章 php数组操作
一.什么是数组 数组是一组有某种共同特性的元素,包括相似性和类型。 每个元素由一个特殊的标识符来区分,称之为key,而每个key都有一个value 1.创建数组的两种方式: 1.1 用array()函数 复制代码 代码如下: <?php $usernames = array ("Alerk", "Mary", "Lucy", "Bob", "Jack", "John", "Mark" ); foreach ( $usernames as $name ) { echo $name . "<br/>"; } ?> output Alerk Mary Lucy Bob Jack John Mark 1.2 用range()函数 复制代码 代码如下: <?php $numbers = range ( 0, 10 ); foreach ( $numbers as $num ) { echo $num . "<br/>"; } $letters = range ( "a", "z" ); foreach ( $letters as $letter ) { echo $letter . "<br/>"; } ?> output 0 1 2 3 4 5 6 7 8 9 10 a c d e f g h i j k l m o q r t u v w x y z 2.循环访问数组元素的两种方式: 2.1 for循环 复制代码 代码如下: <?php //range的第三个参数表示步长 $numbers = range(1,10,2); for($i = 0;$i<count($numbers); $i ++) { echo $numbers[$i]."<br/>"; } ?> output 1 3 5 7 9 2.2 foreach循环 复制代码 代码如下: <?php $letters = range("a","h",2); foreach($letters as $letter) { echo $letter."<br/>"; } ?> output a c e g Foreach还可以用来输出数组的下标和对应的值 复制代码 代码如下: <?php $letters = range("a","g",2); foreach($letters as $key => $value) { echo $key."---".$value."<br/>"; } ?> output 0---a 1---c 2---e 3---g 3.is_array()函数,用于变量判断是否为一个数组 复制代码 代码如下: <?php $numbers = range(1,10,2); if(is_array($numbers)) { foreach($numbers as $num) { echo $num."<br/>"; } } else { echo $numbers; } ?> 4.print_r函数,打印关于变量的易于理解的信息 复制代码 代码如下: <?php $usernames = array ("Jackie", "Mary", "Lucy", "Bob", "Mark", "John" ); print_r ( $usernames ); ?> output Array ( [0] => Jackie [1] => Mary [2] => Lucy [3] => Bob [4] => Mark [5] => John ) 源代码里可以看到显示为: Array ( [0] => Jackie [1] => Mary [2] => Lucy [3] => Bob [4] => Mark [5] => John ) 二.自定义键数组 1.如果不想创建默认下标为零的数组,可以用如下方法,创建键为字符串的数组 复制代码 代码如下: <?php //初始化数组 $userages = array("Jack"=> 23,"Lucy"=>25,"Mark"=>28); //访问数组各元素 echo $userages["Jack"]."<br/>"; echo $userages["Lucy"]."<br/>"; echo $userages["Mark"]."<br/>"; ?> 2.往自定义键数组里追加元素 复制代码 代码如下: <?php //初始化数组 $ages = array("Jack"=>23); //追加元素 $ages["Lucy"]=25; $ages["Mark"]=28; foreach($ages as $key => $value) { echo $key."----".$value."<br/>"; } ?> 3.直接添加元素,无需创建数组。 复制代码 代码如下: <?php //不创建数组直接添加 $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; foreach($ages as $key => $value) { echo $key."----".$value."<br/>"; } ?> 4.循环打印数组foreach的使用 复制代码 代码如下: <?php $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; foreach($ages as $key => $value) { echo $key."=>".$value."<br/>"; } ?> 5. each() -- 返回数组中当前的键/值对并将数组指针向前移动一步 复制代码 代码如下: <?php $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; $a = each($ages); print_r($a); echo "<br/>"; $a = each($ages); print_r($a); echo "<br/>"; $a = each($ages); print_r($a); ?> 用each()函数做循环打印 复制代码 代码如下: <?php $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; while(!! $element = each($ages)) { print_r($element); echo "<br>"; } ?> 另一种打印方式 复制代码 代码如下: <?php $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; while(!! $element = each($ages)) { echo $element["key"]."=>".$element["value"]; echo "<br>"; } ?> 6.list()函数的使用--把数组中的值赋给一些变量 复制代码 代码如下: <?php $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; list($name,$age)= each($ages); echo $name."=>".$age; ?> 用list循环打印结果 复制代码 代码如下: <?php $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; while(!!list($name,$age)= each($ages)) { echo $name."=>".$age."<br>"; } ?> output Jack=>23 Lucy=>25 Mark=>28 7.reset()函数的使用--将数组的内部指针指向第一个单元 复制代码 代码如下: <?php $ages["Jack"]=23; $ages["Lucy"]=25; $ages["Mark"]=28; each($ages); each($ages); list($name,$age)= each($ages); echo $name."=>".$age."<br>"; //把数组重新设定到数组开始处 reset($ages); list($name,$age)= each($ages); echo $name."=>".$age."<br>"; ?> Output Mark=>28 Jack=>23 8. array_unique() -- 移除数组中重复的值 复制代码 代码如下: <?php $nums = array(1,2,3,4,5,6,5,4,3,2,1,1,2,3,4,5,6); //返回一个不包含重复值的数组 $result = array_unique($nums); print_r($result); ?> Output Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 9. array_flip ()-- 交换数组中的键和值 <?php $userages = array("Jack"=> 23,"Lucy"=>25,"Mark"=>28); $ages = array_flip($userages); print_r($ages); ?> output Array ( [23] => Jack [25] => Lucy [28] => Mark ) 三.数组里的数组 数组里不一定就是一个关键字和值的列表,数组里也可以放入数组 复制代码 代码如下: <?php $produces = array( array("apple",6,28.8), array("pear",3,15.6), array("banana",10,4.6) ); echo $produces[0][0]."|".$produces[0][1]."|".$produces[0][2]."<br>"; echo $produces[1][0]."|".$produces[1][1]."|".$produces[1][2]."<br>"; echo $produces[2][0]."|".$produces[2][1]."|".$produces[2][2]."<br>"; ?> output apple|6|28.8 pear|3|15.6 banana|10|4.6 用for循环打印数组中的数组 复制代码 代码如下: <?php $produces = array ( array ("apple", 6, 28.8 ), array ("pear", 3, 15.6 ), array ("banana", 10, 4.6 ) ); for($i = 0; $i < count ( $produces ); $i ++) { for($j = 0; $j < count ( $produces [$i] ); $j ++) { echo "|" . $produces[$i][$j]; } echo "<br>"; } ?> output |apple|6|28.8 |pear|3|15.6 |banana|10|4.6 二维数组 复制代码 代码如下: <?php $produces = array ( array ("name" => "apple", "amount" => 6, "price" => 28.8 ), array ("name" => "pear", "amount" => 3, "price" => 15.6 ), array ("name" => "banana", "amount" => 10, "price" => 4.6 ) ); while(!!List($key,$value)=each($produces)) { while(!!list($key2,$value2)=each($value)) { echo "|".$key2."=>".$value2; } echo "<br>"; } ?> output |name=>apple|amount=>6|price=>28.8 |name=>pear|amount=>3|price=>15.6 |name=>banana|amount=>10|price=>4.6 用foreach来打印则更容易(推荐) 复制代码 代码如下: <?php $produces = array ( array ("name" => "apple", "amount" => 6, "price" => 28.8 ), array ("name" => "pear", "amount" => 3, "price" => 15.6 ), array ("name" => "banana", "amount" => 10, "price" => 4.6 ) ); foreach($produces as $key1 => $value1) { foreach($value1 as $key2 => $value2) { echo "|".$key2."=>".$value2; } echo "<br>"; } ?> output |name=>apple|amount=>6|price=>28.8 |name=>pear|amount=>3|price=>15.6 |name=>banana|amount=>10|price=>4.6 四.数组的排序 1.Sort()函数对英文的排序 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("lemo","banana","apple","pear"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; sort($fruits); echo "排序后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [0] => lemo [1] => banana [2] => apple [3] => pear ) 排序后的数组:Array ( [0] => apple [1] => banana [2] => lemo [3] => pear ) 2.Sort()函数对中文的排序 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("柠檬","香蕉","苹果","梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; sort($fruits); echo "排序后的数组:"; print_r($fruits); ?> Output: 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 排序后的数组:Array ( [0] => 柠檬 [1] => 梨子 [2] => 苹果 [3] => 香蕉 ) 3. asort -- 对数组进行排序并保持索引关系 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("a"=>"柠檬","b"=>"香蕉","c"=>"苹果","d"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; asort($fruits); echo "排序后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 排序后的数组:Array ( [a] => 柠檬 [d] => 梨子 [c] => 苹果 [b] => 香蕉 ) 4. ksort -- 对数组按照键名排序 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("b"=>"柠檬","a"=>"香蕉","d"=>"苹果","c"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; ksort($fruits); echo "排序后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [b] => 柠檬 [a] => 香蕉 [d] => 苹果 [c] => 梨子 ) 排序后的数组:Array ( [a] => 香蕉 [b] => 柠檬 [c] => 梨子 [d] => 苹果 ) 5. rsort -- 对数组逆向排序 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("柠檬","香蕉","苹果","梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; rsort($fruits); echo "排序后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 排序后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 梨子 [3] => 柠檬 ) 6. arsort -- 对数组进行逆向排序并保持索引关系 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("a"=>"柠檬","b"=>"香蕉","c"=>"苹果","d"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; arsort($fruits); echo "排序后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 排序后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 [a] => 柠檬 ) 7. krsort -- 对数组按照键名逆向排序 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("a"=>"柠檬","b"=>"香蕉","c"=>"苹果","d"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; krsort($fruits); echo "排序后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 排序后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 ) 8. shuffle -- 将数组打乱 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("a"=>"柠檬","b"=>"香蕉","c"=>"苹果","d"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; shuffle($fruits); echo "打乱后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 打乱后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 柠檬 [3] => 梨子 ) 9. array_reverse -- 返回一个单元顺序相反的数组 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("a"=>"柠檬","b"=>"香蕉","c"=>"苹果","d"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; $fruits = array_reverse($fruits); echo "反转后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 反转后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 ) 10. array_unshift -- 在数组开头插入一个或多个单元 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("a"=>"柠檬","b"=>"香蕉","c"=>"苹果","d"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; array_unshift($fruits,"杮子"); echo "插入后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 插入后的数组:Array ( [0] => 杮子 [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 11. array_shift -- 将数组开头的单元移出数组 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array("a"=>"柠檬","b"=>"香蕉","c"=>"苹果","d"=>"梨子"); echo "原始的数组:"; print_r($fruits); echo "<br/>"; array_shift($fruits); echo "移出后的数组:"; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 移出后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 12. array_rand -- 从数组中随机取出一个或多个单元 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array ("柠檬", "香蕉", "苹果", "梨子" ); echo "原始的数组:"; print_r ( $fruits ); echo "<br/>"; $newArr_key = array_rand ( $fruits, 2 ); echo "随机后的数组:"; echo $fruits [$newArr_key [0]]." "; echo $fruits [$newArr_key [1]]; ?> output 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 随机后的数组:梨子 苹果 13. array_pop -- 将数组最后一个单元弹出(出栈) 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array ("柠檬", "香蕉", "苹果", "梨子" ); echo "原始的数组:"; print_r ( $fruits ); echo "<br/>"; array_pop ( $fruits ); echo "弹出后的数组:"; print_r ( $fruits ); ?> Output: 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 弹出后的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 ) 14. array_push -- 将一个或多个单元压入数组的末尾(入栈) 复制代码 代码如下: <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <?php $fruits = array ("柠檬", "香蕉", "苹果", "梨子" ); echo "原始的数组:"; print_r ( $fruits ); echo "<br/>"; array_push ( $fruits,"杮子"); echo "弹出后的数组:"; print_r ( $fruits ); ?> Output: 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 弹出后的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 [4] => 杮子 ) 五.数组的指针的操作 each -- 返回数组中当前的键/值对并将数组指针向前移动一步 current -- 返回数组中的当前单元 reset -- 将数组的内部指针指向第一个单元 end -- 将数组的内部指针指向最后一个单元 next -- 将数组中的内部指针向前移动一位 pos -- current() 的别名 prev -- 将数组的内部指针倒回一位 <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 复制代码 代码如下: <?php $fruits = array ("柠檬", "香蕉", "苹果", "梨子" ); print_r ( $fruits ); echo "<br/>"; echo "each() : "; print_r ( each ( $fruits ) ); echo "<br/>"; echo "current() : "; echo (current ( $fruits )); echo "<br/>"; echo "next() : "; echo (next ( $fruits )); echo "<br/>"; echo "end() : "; echo (end ( $fruits )); echo "<br/>"; echo "prev() : "; echo (prev ( $fruits )); echo "<br/>"; echo "pos() : "; echo (pos ( $fruits )); echo "<br/>"; ?> Output: Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) each() : Array ( [1] => 柠檬 [value] => 柠檬 [0] => 0 [key] => 0 ) current() : 香蕉 next() : 苹果 end() : 梨子 prev() : 苹果 pos() : 苹果 六.统计数组个数 count -- 计算数组中的单元数目或对象中的属性个数 sizeof -- count() 的别名 array_count_values -- 统计数组中所有的值出现的次数 复制代码 代码如下: <?php $nums = array (1, 3, 5, 1, 3, 4, 5, 65, 4, 2, 2, 1, 4, 4, 1, 1, 4, 1, 5, 4, 5, 4 ); echo count ( $nums ); echo "<br>"; echo sizeof ( $nums ); echo "<br>"; $arrayCount = array_count_values ( $nums ); print_r ( $arrayCount ); ?> output 22 22 Array ( [1] => 6 [3] => 2 [5] => 4 [4] => 7 [65] => 1 [2] => 2 ) 七.将数组转换成标量变量:extract() 把数组中的每个元素转换成变量,变量名是数组元素的key,变量值为数组元素的value. 复制代码 代码如下: <?php $fruits = array("a"=>"apple","b"=>"banana","o"=>"orange"); extract($fruits); echo $a."<br>"; echo $b."<br>"; echo $o."<br>"; ?> output apple banana orange
收藏该网址