一.数组的遍历
<?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', )点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号