一.什么是数组 数组是一组有某种共同特性的元素,包括相似性和类型。 每个元素由一个特殊的标识符来区分,称之为key,而每个key都有一个value 1.创建数组的两种方式: 1.1 用array()函数 <div class="codetitle"><a style="CURSOR: pointer" data="26746" class="copybut" id="copybut26746" onclick="doCopy('code26746')"> 代码如下:<div class="codebody" id="code26746"> <?php $usernames = array ('Alerk','Mary','Lucy','Bob','Jack','John','Mark' ); foreach ( $usernames as $name ) { echo $name . ' '; } ?> output Alerk Mary Lucy Bob Jack John Mark 1.2 用range()函数 <div class="codetitle"><a style="CURSOR: pointer" data="18460" class="copybut" id="copybut18460" onclick="doCopy('code18460')"> 代码如下:<div class="codebody" id="code18460"> <?php $numbers = range ( 0,10 ); foreach ( $numbers as $num ) { echo $num . ' '; } $letters = range ( 'a','z' ); foreach ( $letters as $letter ) { echo $letter . ' '; } ?> 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循环 <div class="codetitle"><a style="CURSOR: pointer" data="96434" class="copybut" id="copybut96434" onclick="doCopy('code96434')"> 代码如下:<div class="codebody" id="code96434"> <?php //range的第三个参数表示步长 $numbers = range(1,10,2); for($i = 0;$i<count($numbers); $i ++) { echo $numbers[$i].' '; } ?> output 1 3 5 7 9 2.2 foreach循环 <div class="codetitle"><a style="CURSOR: pointer" data="35955" class="copybut" id="copybut35955" onclick="doCopy('code35955')"> 代码如下:<div class="codebody" id="code35955"> <?php $letters = range('a','h',2); foreach($letters as $letter) { echo $letter.' '; } ?> output a c e g Foreach还可以用来输出数组的下标和对应的值 <div class="codetitle"><a style="CURSOR: pointer" data="17392" class="copybut" id="copybut17392" onclick="doCopy('code17392')"> 代码如下:<div class="codebody" id="code17392"> <?php $letters = range('a','g',2); foreach($letters as $key => $value) { echo $key.'---'.$value.' '; } ?> output 0---a 1---c 2---e 3---g 3.is_array()函数,用于变量判断是否为一个数组 <div class="codetitle"><a style="CURSOR: pointer" data="12102" class="copybut" id="copybut12102" onclick="doCopy('code12102')"> 代码如下:<div class="codebody" id="code12102"> <?php $numbers = range(1,2); if(is_array($numbers)) { foreach($numbers as $num) { echo $num.' '; } } else { echo $numbers; } ?> 4.print_r函数,打印关于变量的易于理解的信息 <div class="codetitle"><a style="CURSOR: pointer" data="38805" class="copybut" id="copybut38805" onclick="doCopy('code38805')"> 代码如下:<div class="codebody" id="code38805"> <?php $usernames = array ('Jackie','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.如果不想创建默认下标为零的数组,可以用如下方法,创建键为字符串的数组 <div class="codetitle"><a style="CURSOR: pointer" data="58695" class="copybut" id="copybut58695" onclick="doCopy('code58695')"> 代码如下:<div class="codebody" id="code58695"> <?php //初始化数组 $userages = array('Jack'=> 23,'Lucy'=>25,'Mark'=>28); //访问数组各元素 echo $userages['Jack'].' '; echo $userages['Lucy'].' '; echo $userages['Mark'].' '; ?> 2.往自定义键数组里追加元素 <div class="codetitle"><a style="CURSOR: pointer" data="25583" class="copybut" id="copybut25583" onclick="doCopy('code25583')"> 代码如下:<div class="codebody" id="code25583"> <?php //初始化数组 $ages = array('Jack'=>23); //追加元素 $ages['Lucy']=25; $ages['Mark']=28; foreach($ages as $key => $value) { echo $key.'----'.$value.' '; } ?> 3.直接添加元素,无需创建数组。 <div class="codetitle"><a style="CURSOR: pointer" data="24919" class="copybut" id="copybut24919" onclick="doCopy('code24919')"> 代码如下:<div class="codebody" id="code24919"> <?php //不创建数组直接添加 $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; foreach($ages as $key => $value) { echo $key.'----'.$value.' '; } ?> 4.循环打印数组foreach的使用 <div class="codetitle"><a style="CURSOR: pointer" data="352" class="copybut" id="copybut352" onclick="doCopy('code352')"> 代码如下:<div class="codebody" id="code352"> <?php $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; foreach($ages as $key => $value) { echo $key.'=>'.$value.' '; } ?> 5. each() -- 返回数组中当前的键/值对并将数组指针向前移动一步 <div class="codetitle"><a style="CURSOR: pointer" data="74054" class="copybut" id="copybut74054" onclick="doCopy('code74054')"> 代码如下:<div class="codebody" id="code74054"> <?php $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; $a = each($ages); print_r($a); echo ' '; $a = each($ages); print_r($a); echo ' '; $a = each($ages); print_r($a); ?> 用each()函数做循环打印 <div class="codetitle"><a style="CURSOR: pointer" data="26392" class="copybut" id="copybut26392" onclick="doCopy('code26392')"> 代码如下:<div class="codebody" id="code26392"> <?php $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; while(!! $element = each($ages)) { print_r($element); echo ' '; } ?> 另一种打印方式 <div class="codetitle"><a style="CURSOR: pointer" data="69376" class="copybut" id="copybut69376" onclick="doCopy('code69376')"> 代码如下:<div class="codebody" id="code69376"> <?php $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; while(!! $element = each($ages)) { echo $element['key'].'=>'.$element['value']; echo ' '; } ?> 6.list()函数的使用--把数组中的值赋给一些变量 <div class="codetitle"><a style="CURSOR: pointer" data="93539" class="copybut" id="copybut93539" onclick="doCopy('code93539')"> 代码如下:<div class="codebody" id="code93539"> <?php $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; list($name,$age)= each($ages); echo $name.'=>'.$age; ?> 用list循环打印结果 <div class="codetitle"><a style="CURSOR: pointer" data="21051" class="copybut" id="copybut21051" onclick="doCopy('code21051')"> 代码如下:<div class="codebody" id="code21051"> <?php $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; while(!!list($name,$age)= each($ages)) { echo $name.'=>'.$age.' '; } ?> output Jack=>23 Lucy=>25 Mark=>28 7.reset()函数的使用--将数组的内部指针指向第一个单元 <div class="codetitle"><a style="CURSOR: pointer" data="85398" class="copybut" id="copybut85398" onclick="doCopy('code85398')"> 代码如下:<div class="codebody" id="code85398"> <?php $ages['Jack']=23; $ages['Lucy']=25; $ages['Mark']=28; each($ages); each($ages); list($name,$age)= each($ages); echo $name.'=>'.$age.' '; //把数组重新设定到数组开始处 reset($ages); list($name,$age)= each($ages); echo $name.'=>'.$age.' '; ?> Output Mark=>28 Jack=>23 8. array_unique() -- 移除数组中重复的值 <div class="codetitle"><a style="CURSOR: pointer" data="18915" class="copybut" id="copybut18915" onclick="doCopy('code18915')"> 代码如下:<div class="codebody" id="code18915"> <?php $nums = array(1,2,3,4,5,6,1,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,'Mark'=>28); $ages = array_flip($userages); print_r($ages); ?> output Array ( [23] => Jack [25] => Lucy [28] => Mark ) 三.数组里的数组 数组里不一定就是一个关键字和值的列表,数组里也可以放入数组 <div class="codetitle"><a style="CURSOR: pointer" data="91807" class="copybut" id="copybut91807" onclick="doCopy('code91807')"> 代码如下:<div class="codebody" id="code91807"> <?php $produces = array( array('apple',28.8), array('pear',15.6), array('banana',4.6) ); echo $produces[0][0].'|'.$produces[0][1].'|'.$produces[0][2].' '; echo $produces[1][0].'|'.$produces[1][1].'|'.$produces[1][2].' '; echo $produces[2][0].'|'.$produces[2][1].'|'.$produces[2][2].' '; ?> output apple|6|28.8 pear|3|15.6 banana|10|4.6 用for循环打印数组中的数组 <div class="codetitle"><a style="CURSOR: pointer" data="99689" class="copybut" id="copybut99689" onclick="doCopy('code99689')"> 代码如下:<div class="codebody" id="code99689"> <?php $produces = array ( array ('apple',28.8 ), array ('pear',15.6 ), array ('banana',4.6 ) ); for($i = 0; $i < count ( $produces ); $i ++) { for($j = 0; $j < count ( $produces [$i] ); $j ++) { echo '|' . $produces[$i][$j]; } echo ' '; } ?> output |apple|6|28.8 |pear|3|15.6 |banana|10|4.6 二维数组 <div class="codetitle"><a style="CURSOR: pointer" data="49486" class="copybut" id="copybut49486" onclick="doCopy('code49486')"> 代码如下:<div class="codebody" id="code49486"> <?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 ' '; } ?> output |name=>apple|amount=>6|price=>28.8 |name=>pear|amount=>3|price=>15.6 |name=>banana|amount=>10|price=>4.6 用foreach来打印则更容易(推荐) <div class="codetitle"><a style="CURSOR: pointer" data="26651" class="copybut" id="copybut26651" onclick="doCopy('code26651')"> 代码如下:<div class="codebody" id="code26651"> <?php $produces = array ( array ('name' => 'apple','price' => 4.6 ) ); foreach($produces as $key1 => $value1) { foreach($value1 as $key2 => $value2) { echo '|'.$key2.'=>'.$value2; } echo ' '; } ?> output |name=>apple|amount=>6|price=>28.8 |name=>pear|amount=>3|price=>15.6 |name=>banana|amount=>10|price=>4.6 四.数组的排序 1.Sort()函数对英文的排序 <div class="codetitle"><a style="CURSOR: pointer" data="21715" class="copybut" id="copybut21715" onclick="doCopy('code21715')"> 代码如下:<div class="codebody" id="code21715"> <?php $fruits = array('lemo','banana','apple','pear'); echo '原始的数组:'; print_r($fruits); echo ' '; 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()函数对中文的排序 <div class="codetitle"><a style="CURSOR: pointer" data="9966" class="copybut" id="copybut9966" onclick="doCopy('code9966')"> 代码如下:<div class="codebody" id="code9966"> <?php $fruits = array('柠檬','香蕉','苹果','梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; sort($fruits); echo '排序后的数组:'; print_r($fruits); ?> Output: 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 排序后的数组:Array ( [0] => 柠檬 [1] => 梨子 [2] => 苹果 [3] => 香蕉 ) 3. asort -- 对数组进行排序并保持索引关系 <div class="codetitle"><a style="CURSOR: pointer" data="45214" class="copybut" id="copybut45214" onclick="doCopy('code45214')"> 代码如下:<div class="codebody" id="code45214"> <?php $fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; asort($fruits); echo '排序后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 排序后的数组:Array ( [a] => 柠檬 [d] => 梨子 [c] => 苹果 [b] => 香蕉 ) 4. ksort -- 对数组按照键名排序 <div class="codetitle"><a style="CURSOR: pointer" data="39469" class="copybut" id="copybut39469" onclick="doCopy('code39469')"> 代码如下:<div class="codebody" id="code39469"> <?php $fruits = array('b'=>'柠檬','a'=>'香蕉','d'=>'苹果','c'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; ksort($fruits); echo '排序后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [b] => 柠檬 [a] => 香蕉 [d] => 苹果 [c] => 梨子 ) 排序后的数组:Array ( [a] => 香蕉 [b] => 柠檬 [c] => 梨子 [d] => 苹果 ) 5. rsort -- 对数组逆向排序 <div class="codetitle"><a style="CURSOR: pointer" data="83262" class="copybut" id="copybut83262" onclick="doCopy('code83262')"> 代码如下:<div class="codebody" id="code83262"> <?php $fruits = array('柠檬','梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; rsort($fruits); echo '排序后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 排序后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 梨子 [3] => 柠檬 ) 6. arsort -- 对数组进行逆向排序并保持索引关系 <div class="codetitle"><a style="CURSOR: pointer" data="25324" class="copybut" id="copybut25324" onclick="doCopy('code25324')"> 代码如下:<div class="codebody" id="code25324"> <?php $fruits = array('a'=>'柠檬','d'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; arsort($fruits); echo '排序后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 排序后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 [a] => 柠檬 ) 7. krsort -- 对数组按照键名逆向排序 <div class="codetitle"><a style="CURSOR: pointer" data="72581" class="copybut" id="copybut72581" onclick="doCopy('code72581')"> 代码如下:<div class="codebody" id="code72581"> <?php $fruits = array('a'=>'柠檬','d'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; krsort($fruits); echo '排序后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 排序后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 ) 8. shuffle -- 将数组打乱 <div class="codetitle"><a style="CURSOR: pointer" data="83926" class="copybut" id="copybut83926" onclick="doCopy('code83926')"> 代码如下:<div class="codebody" id="code83926"> <?php $fruits = array('a'=>'柠檬','d'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; shuffle($fruits); echo '打乱后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 打乱后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 柠檬 [3] => 梨子 ) 9. array_reverse -- 返回一个单元顺序相反的数组 <div class="codetitle"><a style="CURSOR: pointer" data="76449" class="copybut" id="copybut76449" onclick="doCopy('code76449')"> 代码如下:<div class="codebody" id="code76449"> <?php $fruits = array('a'=>'柠檬','d'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; $fruits = array_reverse($fruits); echo '反转后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 反转后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 ) 10. array_unshift -- 在数组开头插入一个或多个单元 <div class="codetitle"><a style="CURSOR: pointer" data="98880" class="copybut" id="copybut98880" onclick="doCopy('code98880')"> 代码如下:<div class="codebody" id="code98880"> <?php $fruits = array('a'=>'柠檬','d'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; array_unshift($fruits,'杮子'); echo '插入后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 插入后的数组:Array ( [0] => 杮子 [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 11. array_shift -- 将数组开头的单元移出数组 <div class="codetitle"><a style="CURSOR: pointer" data="5029" class="copybut" id="copybut5029" onclick="doCopy('code5029')"> 代码如下:<div class="codebody" id="code5029"> <?php $fruits = array('a'=>'柠檬','d'=>'梨子'); echo '原始的数组:'; print_r($fruits); echo ' '; array_shift($fruits); echo '移出后的数组:'; print_r($fruits); ?> output 原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 移出后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 ) 12. array_rand -- 从数组中随机取出一个或多个单元 <div class="codetitle"><a style="CURSOR: pointer" data="33464" class="copybut" id="copybut33464" onclick="doCopy('code33464')"> 代码如下:<div class="codebody" id="code33464"> <?php $fruits = array ('柠檬','梨子' ); echo '原始的数组:'; print_r ( $fruits ); echo ' '; $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 -- 将数组最后一个单元弹出(出栈) <div class="codetitle"><a style="CURSOR: pointer" data="74717" class="copybut" id="copybut74717" onclick="doCopy('code74717')"> 代码如下:<div class="codebody" id="code74717"> <?php $fruits = array ('柠檬','梨子' ); echo '原始的数组:'; print_r ( $fruits ); echo ' '; array_pop ( $fruits ); echo '弹出后的数组:'; print_r ( $fruits ); ?> Output: 原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 ) 弹出后的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 ) 14. array_push -- 将一个或多个单元压入数组的末尾(入栈) <div class="codetitle"><a style="CURSOR: pointer" data="77517" class="copybut" id="copybut77517" onclick="doCopy('code77517')"> 代码如下:<div class="codebody" id="code77517"> <?php $fruits = array ('柠檬','梨子' ); echo '原始的数组:'; print_r ( $fruits ); echo ' '; 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 -- 将数组的内部指针倒回一位 <div class="codetitle"><a style="CURSOR: pointer" data="95675" class="copybut" id="copybut95675" onclick="doCopy('code95675')"> 代码如下:<div class="codebody" id="code95675"> <?php $fruits = array ('柠檬','梨子' ); print_r ( $fruits ); echo ' '; echo 'each() : '; print_r ( each ( $fruits ) ); echo ' '; echo 'current() : '; echo (current ( $fruits )); echo ' '; echo 'next() : '; echo (next ( $fruits )); echo ' '; echo 'end() : '; echo (end ( $fruits )); echo ' '; echo 'prev() : '; echo (prev ( $fruits )); echo ' '; echo 'pos() : '; echo (pos ( $fruits )); echo ' '; ?> 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 -- 统计数组中所有的值出现的次数 <div class="codetitle"><a style="CURSOR: pointer" data="14643" class="copybut" id="copybut14643" onclick="doCopy('code14643')"> 代码如下:<div class="codebody" id="code14643"> <?php $nums = array (1,65,4 ); echo count ( $nums ); echo ' '; echo sizeof ( $nums ); echo ' '; $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. <div class="codetitle"><a style="CURSOR: pointer" data="4625" class="copybut" id="copybut4625" onclick="doCopy('code4625')"> 代码如下:<div class="codebody" id="code4625"> <?php $fruits = array('a'=>'apple','b'=>'banana','o'=>'orange'); extract($fruits); echo $a.' '; echo $b.' '; echo $o.' '; ?> output apple banana orange
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|