一.数组的遍历
实例
<?php /** * 1数组分类 * 2.数组定义 * 3.数组遍历 */ //1. 数组分为二类:索引数组,关联数组 $arts = ['亢龙有悔','飞龙在天','见龙在田','鸿渐于陆','潜龙勿用','突如其来']; // 索引数组 //索引从0开始计数 //echo $arts[0],'<br>'; // 键名是数字索引 //echo $arts[1],'<br>'; //echo $arts[5],'<br>'; //关联数组 $swordsman = ['name'=>'郭靖','position'=>'金刀驸马','skill'=>'降龙十八掌']; //echo $swordsman['name'],'<br>'; // 键名是字符串 //echo $swordsman['skill'],'<br>'; // 键名是字符串 //2.数组定义 // 1. 整体创建 //$a = '见龙在田'; //$b = ['鸿渐于陆','潜龙勿用','突如其来']; //$arts = ['亢龙有悔','飞龙在天',$a,$b]; // 索引数组 //echo '<pre>', print_r($arts,true); //2.逐个来创建 $swordsman = []; //声明一个空数组 $swordsman['name'] = '杨康'; //通过追加的方式添加到新数组中 $swordsman['position'] = '金国小王爷'; $swordsman['skill'] = '九阴白骨爪'; //echo '<pre>', print_r($swordsman,true); //echo '<hr>'; //3. 数组的遍历 //for () $res1 = ''; for ($i=0; $i<count($arts); $i++) { $res1 .= $arts[$i].'---'; } //echo rtrim($res1,'---'),'<hr>'; //while() $res2 = ''; $i=0; while ( $i<count($arts)) { $res2 .= $arts[$i].'---'; $i++; } //echo rtrim($res2,'---'),'<hr>'; // do~while() // foreach() // $value 叫循环变量,每一次数组将要输出的当前的元素赋值给$value //foreach ($swordsman as $key=>$value) { // echo '['.$key,'] => ',$value,'<br>'; //} echo '<hr>'; // list()和each() //while(list($key, $value) = each($swordsman)) { // echo '['.$key,'] => ',$value,'<br>'; //} $arts = ['亢龙有悔','飞龙在天','见龙在田','鸿渐于陆','潜龙勿用','突如其来']; // 索引数组 //数组的内部指针 reset($arts); // 将指针复位,指向第一个元素 //获取当前元素的键名和值 echo key($arts),'-----',current($arts),'<br>'; //下移指针 next($arts); //获取当前元素的键名和值 echo key($arts),'-----',current($arts),'<br>'; //最后一个 end($arts); //获取当前元素的键名和值 echo key($arts),'-----',current($arts),'<br>'; reset($arts); // 将指针复位,指向第一个元素 //获取当前元素的键名和值 echo key($arts),'-----',current($arts),'<br>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
二:1. print_r($arr, $bool) 2. var_dump($var1,$var2....)
3. var_export($arr,true),输出的就是字符串表示: 就是创建这个数组的php语句
echo()
可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。
print()
函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。
print_r() 这里的 print_r(array,true)直接返回一个数组的字符串
可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"\n"。因此用var_dump()函数更适合调试。
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
var_dump()
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
var_dump和print_r的区别:
var_dump返回表达式的类型与值而print_r仅返回结果,相比调试代码使用var_dump更便于阅读。
实例
eg:二维数组的输出: $arr=array( array('a'=>'aa','b'=>'bbb','c'=>'ccc'), array('a'=>'ddd','b'=>'eee','c'=>'fff'), array('a'=>'gg','b'=>'hh')); print_r($arr); //print_r输出: //Array ( [0] => Array ( [a] => aa [b] => bbb [c] => ccc ) [1] => Array ( [a] => ddd [b] => eee [c] => fff ) [2] => Array ( [a] => gg [b] => hh ) ) var_dump($arr); //var_dump输出: /* array (size=3) 0 => array (size=3) 'a' => string 'aa' (length=2) 'b' => string 'bbb' (length=3) 'c' => string 'ccc' (length=3) 1 => array (size=3) 'a' => string 'ddd' (length=3) 'b' => string 'eee' (length=3) 'c' => string 'fff' (length=3) 2 => array (size=2) 'a' => string 'gg' (length=2) 'b' => string 'hh' (length=2) */ 下面在给出一个json格式的输出: $arr=array(array('a'=>'aa','b'=>'bbb','c'=>'ccc'), array('a'=>'ddd','b'=>'eee','c'=>'fff'), array('a'=>'gg','b'=>'hh')); $arra=json_encode($arr); print_r($arra); //print_r输出: [{"a":"aa","b":"bbb","c":"ccc"},{"a":"ddd","b":"eee","c":"fff"},{"a":"gg","b":"hh"}] var_dump($arra); //var_dump输出: string '[{"a":"aa","b":"bbb","c":"ccc"},{"a":"ddd","b":"eee","c":"fff"},{"a":"gg","b":"hh"}]' (length=84)
运行实例 »
点击 "运行实例" 按钮查看在线实例
三.数组的常用操作函数
实例
<?php $arr1 = ['id'=>1, 'name'=>'杨过','sex'=>'male','salary'=>8000]; /** * 1. print_r($arr, $bool) * 2. var_dump($var1,$var2....) * 3. var_export($arr,true),输出的就是字符串表示: 就是创建这个数组的php语句 */ // $res = print_r($arr1,true); //echo '<pre>',$res,'<br>'; //var_dump($arr1); //var_export($arr1); // //1. array_values() 返回所有的值的数组 // echo '<pre>',print_r(array_values($arr1),true); // echo '<pre>', var_export(array_values($arr1),true); // //2. array_keys() 返回所有键的数组 // echo '<pre>', var_export(array_keys($arr1),true),'<br>'; // //3. in_array() 判断是否在数组中 // echo in_array('male1', $arr1) ? '存在' : '<span style="color:red">不存在</span><br>'; // //4. array_key_exists() 判断键值是否存在 // echo array_key_exists('name2', $arr1) ? '存在' : '<span style="color:red">不存在</span><br>'; // //5. array_flip() 键值相互调换 // echo '<pre>', var_export(array_flip($arr1),true); // //6. array_reverse() 数据值相反 echo '<pre>', var_export(array_reverse($arr1),true);
运行实例 »
点击 "运行实例" 按钮查看在线实例
补充 print_r和var_dump 和var_export的区别
1、print_r 打印关于变量易于理解的信息。
php手册中这么介绍print_r()函数,print_r()显示一个变量易于理解的信息。如果给出是string、integer或float,将打印变量值本身。如果给出的是array,将会按照一定格式显示键和元素。object与数组类似。print_r()函数打印数组会把数组的指针移到最后边。使用reset()函数可以将指针会到开始处。
mixed print_r(mixed $var [,bool $return])从函数原型可以了解到此函数可以接受第二个参数,如果第二个参数为true,将不会输出数据,而是返回其输出。
2、var_export 输出或返回一个变量字符串表示。
mixedvar_export( mixed $var [,bool $return]),此函数返回关于传递给该函数的变量的结构信息,它和var_dump()类似,不同的是其返回表示合法的php代码。可以通过设置第二个参数设置为true,从而返回变量表示。其返回字符串可以通过eval()函数重新解析成php变量。
3、var_dump 打印变量相关信息
voidvar_dump(mixed $var [, mixed $var]);此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值,数组将递归展开,通过缩进显示其结构。该函数在断点输出调试中经常使用,此函数打印出变量类型非常方便与调试时使用。
实例
//print_r()函数打印出变量易于理解的信息 $array = array( array('1','2','3','4','5','6','7','8','9','10'), 'string', 'float', array('a','b','c','d','e','f','g','h') ); $float = 12.00; $string = '这是一个字符串'; //print_r($array); //以上输出 // Array // ( // [0] => Array // ( // [0] => 1 // [1] => 2 // [2] => 3 // [3] => 4 // [4] => 5 // [5] => 6 // [6] => 7 // [7] => 8 // [8] => 9 // [9] => 10 // ) // [1] => string // [2] => float // [3] => Array // ( // [0] => a // [1] => b // [2] => c // [3] => d // [4] => e // [5] => f // [6] => g // [7] => h // ) // ) $newArray = print_r($array,true);//这个不会输出,而是把输出的内容返回给变量$newArray //var_dump()打印出变量相关的信息 var_dump($float,$string,$array); //以上会输出 // float(12) // string(21) "这是一个字符串" // array(4) { // [0]=> // array(10) { // [0]=> // string(1) "1" // [1]=> // string(1) "2" // [2]=> // string(1) "3" // [3]=> // string(1) "4" // [4]=> // string(1) "5" // [5]=> // string(1) "6" // [6]=> // string(1) "7" // [7]=> // string(1) "8" // [8]=> // string(1) "9" // [9]=> // string(2) "10" // } // [1]=> // string(6) "string" // [2]=> // string(5) "float" // [3]=> // array(8) { // [0]=> // string(1) "a" // [1]=> // string(1) "b" // [2]=> // string(1) "c" // [3]=> // string(1) "d" // [4]=> // string(1) "e" // [5]=> // string(1) "f" // [6]=> // string(1) "g" // [7]=> // string(1) "h" // } // } var_dump($float,$string); //以上输出 // float(12) // string(21) "这是一个字符串" //var_export()函数输出或返回一个变量字符串表示 var_export($array); //以上输出 // array ( // 0 => // array ( // 0 => '1', // 1 => '2', // 2 => '3', // 3 => '4', // 4 => '5', // 5 => '6', // 6 => '7', // 7 => '8', // 8 => '9', // 9 => '10', // ), // 1 => 'string', // 2 => 'float', // 3 => // array ( // 0 => 'a', // 1 => 'b', // 2 => 'c', // 3 => 'd', // 4 => 'e', // 5 => 'f', // 6 => 'g', // 7 => 'h', // ), // ) $newArray = var_export($array,true);//该函数会把其输出返回给$newArray变量 //$newArray字符串可以使用eval()函数使其变成php可用的变量值。 eval('$exec_Array='.$newArray.';'); var_dump($exec_Array);
运行实例 »
点击 "运行实例" 按钮查看在线实例
四. 数组与变量与字符串之间的转换
1.list() 把数组中的元素转为变量: 用在索引数组上
实例
list($name, $course, $grade) = ['小龙女','php',80]; //$name = '小龙女'; //$course = 'php'; //$grade = 80; echo $name, '的 "', $course, '"课程的成功是: ', $grade, '<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
小龙女的 "php"课程的成功是: 80
2. extract($arr, $flag): 关联数组转为变量
实例
$arr1 = ['id'=>1, 'name'=>'杨过','sex'=>'male','salary'=>8000]; //extract():返回变量的数量 echo '共生成了:',var_export(extract($arr1),true),'个变量:<br>'; //$id=1; $name='杨过'; $sex='male'; $salary=8000; echo '我的id:',$id,',姓名:',$name,',性别:',$sex,',工资: ',$salary,'元<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
共生成了:4个变量:
我的id:1,姓名:杨过,性别:male,工资: 8000元
3.compact(): 将变量转为关联数组
实例
$name = '陈近南'; $faction = '天地会'; $position = '总舵主'; $arr = compact('name','faction','position'); echo var_export($arr,true),'<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
array ( 'name' => '陈近南', 'faction' => '天地会', 'position' => '总舵主', )
4.explode():将字符串转换数组
实例
$lang = 'html,css,javascript,jquery,php,mysql'; echo var_export(explode(',',$lang)),'<br>'; echo var_export(explode(',',$lang,3)),'<br>'; echo var_export(explode(',',$lang,-2)),'<br>';//最常用
运行实例 »
点击 "运行实例" 按钮查看在线实例
array ( 0 => 'html', 1 => 'css', 2 => 'javascript', 3 => 'jquery', 4 => 'php', 5 => 'mysql', )
array ( 0 => 'html', 1 => 'css', 2 => 'javascript,jquery,php,mysql', )
array ( 0 => 'html', 1 => 'css', 2 => 'javascript', 3 => 'jquery', )
5.数组的切割 和分块
1.切割
实例
// array_slice():从数组中指定位置,返回指定数量的元素 $arr = [10,20,30,40,50,60]; //$arr = range(10,60,10); echo '<pre>'; //print_r($arr); // 0表示从第一个元素开始输出 echo var_export(array_splice($arr,0),true),'<br>'; // 输出结果 // array ( // 0 => 10, // 1 => 20, // 2 => 30, // 3 => 40, // 4 => 50, // 5 => 60, // ) //从2开始 echo var_export(array_splice($arr, 2,3),true),'<br>'; // 输出结果 // array ( // 0 => 30, // 1 => 40, // 2 => 50, // )
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
$arr = [10,20,30,40,50,60]; //$arr = range(10,60,10); // -2从尾巴开始删除的元素的数量 echo var_export(array_splice($arr, 3,-2),true),'<br>'; //输出结果 // array ( 0 => 40, )
运行实例 »
点击 "运行实例" 按钮查看在线实例
2.分块 array_chunk(): 将大数组分割为小数组
实例
$arr = [10,20,30,40,50,60]; //$arr = range(10,60,10); echo var_export(array_chunk($arr,3),true),'<br>'; //输出结果 // array ( 0 => array ( 0 => 10, 1 => 20, 2 => 30, ), 1 => array ( 3 => 40, 4 => 50, 5 => 60, ), )
运行实例 »
点击 "运行实例" 按钮查看在线实例
3.array_pad(),将数组用指定的数组填充到指定的长度
实例
$arr = [50,60,70]; echo var_export(array_pad($arr, 6, 99),true),'<br>'; echo var_export(array_pad($arr, -5, 'php'),true),'<br>'; //输出结果 // array ( 0 => 50, 1 => 60, 2 => 70, 3 => 99, 4 => 99, 5 => 99, ) // array ( 0 => 'php', 1 => 'php', 2 => 50, 3 => 60, 4 => 70, )
运行实例 »
点击 "运行实例" 按钮查看在线实例
五.数组函数的回调
. array_filter($arr, $callback)
实例
//1. array_filter():回调处理数组中的每个元素的值,仅返回结果为true的元素 $arr1 = [5,0,'',20,null,88,false,'php']; echo '<pre>'; echo '原始数组',var_export($arr1,true),',共有:',count($arr1),'个元素<hr>'; // ''空字符串,0,null,false: false $arr2 = array_filter($arr1); echo '新数组',var_export($arr2,true),',共有:',count($arr2),'个元素<hr>'; 原始数组array ( 0 => 5, 1 => 0, 2 => '', 3 => 20, 4 => NULL, 5 => 88, 6 => false, 7 => 'php', ),共有:8个元素 新数组array ( 0 => 5, 3 => 20, 5 => 88, 7 => 'php', ),共有:4个元素
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
$arr3 = ['html','css','javascript']; $arr4 =array_filter($arr3, function ($value){ return $value !== 'css'; }); echo var_export($arr4),'<hr>'; //输出结果 array ( 0 => 'html', 2 => 'javascript', )
运行实例 »
点击 "运行实例" 按钮查看在线实例
. array_walk($arr, $callback())
实例
$arr = ['name'=>'admin','email'=>'admin@php.cn']; echo var_export($arr, true), '<hr>'; //格式化 array_walk($arr, function (&$value, $key) { echo $key,':',$value,'<br>'; }); echo '<hr>'; //输出结果 array ( 'name' => 'admin', 'email' => 'admin@php.cn', ) name:admin email:admin@php.cn
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
$arr = ['name'=>'admin','email'=>'admin@php.cn']; array_walk($arr, function (&$value, $key, $name) { //如果当前的用户名是:admin,则授权查看,否则拒绝 if ($value != $name) { exit('无权查看'); } else { exit($key.':'.$value); } },'admin1'); //输出 结果 无权查看
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
$arr = ['name'=>'admin','email'=>'admin@php.cn']; array_walk($arr, function (&$value, $key, $name) { //如果当前的用户名是:admin,则授权查看,否则拒绝 if ($value != $name) { exit('无权查看'); } else { exit($key.':'.$value); } },'admin'); //输出结果 name:admin
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
echo '<pre>'; echo var_export(array_unique([1,2,2,3,3,4,4,5,6])); echo var_export(array_fill(2,10,3)); //输出结果 array ( 0 => 1, 1 => 2, 3 => 3, 5 => 4, 7 => 5, 8 => 6, ) array ( 2 => 3, 3 => 3, 4 => 3, 5 => 3, 6 => 3, 7 => 3, 8 => 3, 9 => 3, 10 => 3, 11 => 3, )
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
echo var_export(array_rand(range(1,33),7)); echo "<hr>"; echo var_export(array_rand(range(1,16),3)); echo "<hr>"; //输出结果 array ( 0 => 2, 1 => 8, 2 => 9, 3 => 13, 4 => 14, 5 => 23, 6 => 24, ) array ( 0 => 3, 1 => 9, 2 => 10, )
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
$arr = ['东邪','西毒','南帝','北丐']; shuffle($arr); // 验证码 echo var_export($arr); //输出乱序 array ( 0 => '北丐', 1 => '南帝', 2 => '西毒', 3 => '东邪', )
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
//array_merge():合并多个数组,相同键名互相覆盖 $db_sys = ['host'=>'127.0.0.1','user'=>'root','pass'=>'root']; $db_user = ['host'=>'localhost', 'pass'=>sha1('123456')]; $res=array_merge($db_sys, $db_user); echo var_export($res); //输出结果 array ( 'host' => 'localhost', 'user' => 'root', 'pass' => '7c4a8d09ca3762af61e59520943dc26494f8941b', )
运行实例 »
点击 "运行实例" 按钮查看在线实例