博客列表 >常用数组函数(二)---2018-8-27

常用数组函数(二)---2018-8-27

晓明的博客
晓明的博客原创
2018年08月27日 20:25:11889浏览

一.数组的遍历

    

实例

<?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', )

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议