0x01 数组分类

在php中有两种数组:索引数组和关联数组

索引数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组。

关联数组是以字符串作为索引值,关联数组更像操作表。索引值为列名,用于访问列的数剧

0x02 数组定义

直接赋值的方式声明数组

使用array( )语言结构新建数组

使用[ ] 定义数组

多维数组的声明

2.1 直接赋值的方式声明数组
<?php
$array[0] = "hello";
$array[1] = "world";
echo "<pre>";
var_dump($array);
?>

输出

array(2) {

[0]=>

string(5) "hello"

[1]=>

string(5) "world"

}

<?php
$array[] = "hello";
$array[] = "world";
$array["test"] = "test";
$array[] = "yicunyiye";
echo "<pre>";
var_dump($array);
?>

输出

array(4) {

[0]=>

string(5) "hello"

[1]=>

string(5) "world"

["test"]=>

string(4) "test"

[2]=>

string(9) "yicunyiye"

}

2.2 使用array( )语言结构新建数组
<?php
$array = array("hello","world","test"=>"test","yicunyiye");
echo "<pre>";
var_dump($array);
?>

array(4) {

[0]=>

string(5) "hello"

[1]=>

string(5) "world"

["test"]=>

string(4) "test"

[2]=>

string(9) "yicunyiye"

}

2.3 下标变化情况
<?php
$array[] = "123";
$array[] = "456";
$array["99"] = "abc";
$array[] = "def";
echo "<pre>";
var_dump($array);
?>

array(4) {

[0]=>

string(3) "123"

[1]=>

string(3) "456"

[99]=>

string(3) "abc"

[100]=>

string(3) "def"

}

2.4 使用[ ]定义数组
<?php
$a = [10,20,30,40,50]; $b = [0=>10,1=>20,2=>30]; $c = ["name"=>"zhangsan","age"=>20]; echo "<pre>";
var_dump($a);
?>

array(5) {

[0]=>

int(10)

[1]=>

int(20)

[2]=>

int(30)

[3]=>

int(40)

[4]=>

int(50)

}

2.5 多维数组的声明
<?php
$array = ["one",
"two",
"test"=>"yicunyiye",
"hello",
[
"hello",
"world",
[
"hello",
"world"
]
]
];
echo "<pre>";
var_dump($array);
?>

array(5) {

[0]=>

string(3) "one"

[1]=>

string(3) "two"

["test"]=>

string(9) "yicunyiye"

[2]=>

string(5) "hello"

[3]=>

array(3) {

[0]=>

string(5) "hello"

[1]=>

string(5) "world"

[2]=>

array(2) {

[0]=>

string(5) "hello"

[1]=>

string(5) "world"

}

}

}

0x03 使用语句循环遍历数组

使用for语句循环遍历数组

使用foreach语句遍历数组

联合使用list( )、each( )和while循环遍历数组

使用数组的内部指针控制函数遍历数组

3.1 使用for语句循环遍历数组
<?php
$arr=array(1, 3, "for"=>4, 5, 6, 7, 8,9,10=>"aa","bb", "cc"); for($i=0; $i<count($arr); $i++){
echo "\$arr[".$i."]=".$arr[$i]."<br>";
}
?>

$arr[0]=1

$arr[1]=3

$arr[2]=5

$arr[3]=6

$arr[4]=7

$arr[5]=8

$arr[6]=9

$arr[7]=

$arr[8]=

$arr[9]=

$arr[10]=aa

可以看到789为空,因为下标有些是字符串而for循环默认为int递增所以出现了问题可以看一下他正常的下标

array(11) {

[0]=>

int(1)

[1]=>

int(3)

["for"]=>

int(4)

[2]=>

int(5)

[3]=>

int(6)

[4]=>

int(7)

[5]=>

int(8)

[6]=>

int(9)

[10]=>

string(2) "aa"

[11]=>

string(2) "bb"

[12]=>

string(2) "cc"

}

3.2 使用foreach语句循环遍历数组
<?php
$arr=array(1, 3, "for"=>4, 5, 6, 7, 8,9,10=>"aa","bb", "cc");
foreach ($arr as $key => $value) {
echo "\$arr[".$key."]=".$value."<br>";
}
?>

输出

$arr[0]=1

$arr[1]=3

$arr[for]=4

$arr[2]=5

$arr[3]=6

$arr[4]=7

$arr[5]=8

$arr[6]=9

$arr[10]=aa

$arr[11]=bb

$arr[12]=cc

3.3 联合使用list( )、each( )和while循环遍历数组
<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit); //eset() 函数将内部指针指向数组中的第一个元素,并输出
while(list($key,$val) = each($fruit)){
echo "$key => $val\n";
}
?>

输出

a => apple b => banana c => cranberry

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
while($sz=each($fruit)){
echo $sz["key"]."==>".$sz["value"]."<br>";
}
?>

输出

a>apple

b>banana

c==>cranberry

0x04 服务器变量:$_SERVER

<?php
var_dump($_SERVER);
?>

0x05 数组相关处理函数

1 数组的键/值操作函数

2 统计数组元素的个数与唯一性

3 使用回调函数处理数组的函数

4 数组的排序函数

5 拆分、合并、分解与结合数组

6 数组与数据结构

7 其他有用的数组处理函数

5.1 数组的键/值操作函数

array_values -- 返回数组中所有的值

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
var_dump(array_values($fruit));
?>

输出

array(3) { [0]=> string(5) "apple" [1]=> string(6) "banana" [2]=> string(9) "cranberry" }

array_keys -- 返回数组中所有的键名

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
var_dump(array_keys($fruit));
?>

输出

array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }

in_array -- 检查数组中是否存在某个值

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
if(in_array("apple",$fruit)){
echo "存在";
}
?>

输出

存在

array_flip -- 交换数组中的键和值

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
$b = array_flip($fruit);
foreach ($b as $key => $value) {
echo "$key==>$value"."<br>";
}
?>

输出

apple>a

banana>b

cranberry==>c

array_reverse --  返回一个单元顺序相反的数组

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
$b = array_reverse($fruit);
foreach ($b as $key => $value) {
echo "$key=>$value"."<br>";
}
?>

输出

c=>cranberry

b=>banana

a=>apple

5.2 统计数组元素的个数与唯一性

count -- 计算数组中的单元数目或对象中的属性个数

array_count_values -- 统计数组中所有的值出现的次数

array_unique -- 移除数组中重复的值

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
var_dump(count($fruit));
?>

输出

int(3)

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
var_dump(array_count_values($fruit));
?>

输出

array(3) { ["apple"]=> int(1) ["banana"]=> int(1) ["cranberry"]=> int(1) }

<?php
$fruit= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry','a' => 'aaa');
var_dump(array_unique($fruit));
?>

输出

array(3) { ["a"]=> string(3) "aaa" ["b"]=> string(6) "banana" ["c"]=> string(9) "cranberry" }

5.3 使用回调函数处理数组的函数

array_filter --  用回调函数过滤数组中的单元

语法:rray array_filter ( array input [, callback callback] )

依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

如果没有提供 callback 函数,array_filter() 将删除 input 中所有等值为 FALSE 的条目。

<?php
$fruit= array('a' => 'apple', 'apple','b' => 'banana', 'c' => 'cranberry','a' => 'aaa'); function test($key){
if($key == 'apple'){
return true;
}else{
return false;
}
} var_dump(array_filter($fruit,"test"));
?>

输出

array(1) { [0]=> string(5) "apple" }

array_map --  将回调函数作用到给定数组的单元上

<?php
$fruit= array('a' => 'apple', 'apple','b' => 'banana', 'c' => 'cranberry','a' => 'aaa');
function myfunction($v)
{
if($v == 'apple'){
return $v." hello";
}
return $v;
}
print_r(array_map("myfunction", $fruit));
?>

输出

Array ( [a] => aaa [0] => apple hello [b] => banana [c] => cranberry )

5.4 数组的排序函数

sort -- 对数组排序(升序)

rsort -- 对数组逆向排序(降序)

usort -- 使用用户自定义的比较函数对数组中的值进行排序

asort -- 对数组进行排序并保持索引关系(关联数组排序)

arsort -- 对数组进行逆向排序并保持索引关系

uasort -- 用户自定义的比较函数对数组进行排序并保持索引关联

ksort -- 对数组按照键名排序

krsort -- 对数组按照键名逆向排序

uksort -- 使用用户自定义的比较函数对数组中的键名进行排序

natsort -- 用“自然排序”算法对数组排序

natcasesort -- 用“自然排序”算法对数组不区分大小写字母排序

array_multisort -- 对多个数组或多维数组进行排序

5.5 拆分、合并、分解与结合数组

array_splice --  把数组中的一部分去掉并用其它值取代

<?php
$fruit= array('a' => 'apple','b' => 'banana', 'c' => 'cranberry','a' => 'aaa'); var_dump(array_splice($fruit, 1,2));
?>

输出

array(2) { ["b"]=> string(6) "banana" ["c"]=> string(9) "cranberry" }

array_combine -- 两个数组的键和值的合并

<?php
$array1 = ['1','2','3'];
$array2 = ['one','two','three'];
var_dump(array_combine($array1,$array2));
?>

输出

array(3) { [1]=> string(3) "one" [2]=> string(3) "two" [3]=> string(5) "three" }

array_intersect -- 计算数组的交集

<?php
$array1 = ['1','2','3','bbb'];
$array2 = ['one','two','three','bbb'];
var_dump(array_intersect($array1,$array2));
?>

输出

array(1) { [3]=> string(3) "bbb" }

array_diff -- 计算数组的差集

<?php
$array1 = ['1','2','3','bbb'];
$array2 = ['one','two','three','bbb'];
var_dump(array_diff($array1,$array2));
?>

输出

array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" }

5.6 数组与数据结构

array_pop -- 将数组最后一个单元弹出(出栈)

array_push --  将一个或多个单元压入数组的末尾(入栈)

<?php
$array1 = ['1','2','3','bbb'];
var_dump(array_pop($array1));
echo "<hr>";
var_dump($array1);
?>

输出

string(3) "bbb"

array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" }

<?php
$array1 = ['1','2','3','bbb'];
var_dump(array_pop($array1));
echo "<hr>";
var_dump($array1);
echo "<hr>";
var_dump(array_push($array1,"yicunyiye"));
echo "<hr>";
var_dump($array1);
?>

输出

string(3) "bbb"

array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" }

int(4)

array(4) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(9) "yicunyiye" }

array_rand --  从数组中随机取出一个或多个单元

shuffle -- 将数组打乱

php第三天-数组的定义,数组的遍历,常规数组的操作的更多相关文章

  1. VB.NET 数组的定义 动态使用 多维数组

    我们都知道在全部程序设计语言中数组都是一个非常重要的概念,数组的作用是同意程序猿用同一个名称来引用多个变量,因此採用数组索引来区分这些变量.非常多情况下利用数组索引来设置一个循环,这样就能够高效地处理 ...

  2. C#数组的定义,不定长的数组?

    首先,在这里我要说明的是,C#中,定义了数组,那么就必须为其指定长度,且他的长度确定,不能够更改.一旦定义一个数组,那么操作系统就在内存中给这个数组指定了一块内存,他是不支持动态分配存储空间的.能够动 ...

  3. 关于JS数组的定义

    关于js数组的定义的一些内容: 数组是一个对象 只用一个变量,储存多个同类型的信息 数组--连续的储存空间 数组的下标从0开始 ps:定义一个数组可以看作是一个旅馆.里面有很多小房子. 1.创建数组- ...

  4. Java基础_0306:数组的定义与使用

    数组 数组指的就是一组相关变量的集合.例如:如果说现在要想定义100个整型变量,按照传统的思路,可能这样定义: int i1,i2 ,... i100,一共写100个变量. 以上的形式的确可以满足技术 ...

  5. 数组的定义和使用,理解多维数组和Array类

    数组的作用 在执行程序的过程中,通常会需要存储大量数据.如果只有少量数据,那么通过声明变量,存储到变量中即可.但当我们的数据是20个.40个甚至是100以上时,就意味着需要声明很多变量,这是不现实的, ...

  6. C语言指针与数组的定义与声明易错分析

    部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...

  7. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  8. C和Java中数组的定义

    在学习C和Java中,关于数组的定义两者不同,在初学的时候,容易产生混淆,现在将两者对比下. 1.初始化 在C语言中,关于一维数组的定义: 完全初始化  int a[5]={1,2,3,4,5},对于 ...

  9. JAVA数组的定义以及使用1

    public class HelloWorld { public static void main(String[] args){ // Scanner s = new Scanner(System. ...

随机推荐

  1. HMM隐马尔可夫模型来龙去脉(一)

    目录 隐马尔可夫模型HMM学习导航 一.认识贝叶斯网络 1.概念原理介绍 2.举例解析 二.马尔可夫模型 1.概念原理介绍 2.举例解析 三.隐马尔可夫模型 1.概念原理介绍 2.举例解析 四.隐马尔 ...

  2. VyOS软路由系统基本设置

    1. VyOS简介 VyOS是一个开源的网络操作系统,可以安装在物理硬件上,也可以安装在你自己的虚拟机上,或者是一个云平台上.它基于GNU/Linux,并加入了多个应用程序,如:Quagga, ISC ...

  3. 玩转Spring——Spring整合JDBC

    传统JDBC代码的弊端在传统的jdbc代码中,即使是执行一条简单的SQL语句,其实现的整个流程也是极为繁琐的,先打开数据库连接执行sql,然后组装结果,最后关闭数据库资源,这中间还有大量的try... ...

  4. Spring Cloud--尚硅谷2020最新版

    Spring Cloud 初识Spring Cloud与微服务 在传统的软件架构中,我们通常采用的是单体应用来构建一个系统,一个单体应用糅合了各种业务模块.起初在业务规模不是很大的情况下,对于单体应用 ...

  5. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建API项目,配置IdentityServer保护API资源

    配套源码:https://gitee.com/jardeng/IdentitySolution 接上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(一):搭 ...

  6. ID3\C4.5\CART

    目录 树模型原理 ID3 C4.5 CART 分类树 回归树 树创建 ID3.C4.5 多叉树 CART分类树(二叉) CART回归树 ID3 C4.5 CART 特征选择 信息增益 信息增益比 基尼 ...

  7. static,private,final,abstract,protected

    1,static:静态变量:位于方法区中,只有一份,这个类的所有实例共享,不可以被继承 静态方法:直接通过类就能调用,静态方法中只能使用静态变量,不可以被继承 2,private:类不能用privat ...

  8. “计数质数”问题的常规思路和Sieve of Eratosthenes算法分析

    题目描述 题目来源于 LeetCode 204.计数质数,简单来讲就是求"不超过整数 n 的所有素数个数". 常规思路 一般来讲,我们会先写一个判断 a 是否为素数的 isPrim ...

  9. Promise、Generator,Async/await

    我们知道JavaScript是单线程语言,如果没有异步编程非得卡死. 以前,异步编程的方法有下面四种 回调函数 事件监听 发布/订阅 Promise对象 现在据说异步编程终极解决方案是——async/ ...

  10. MinGW-w64安装过程中出现ERROR res错误的问题

    使用 mingw-get-setup.exe 安装.在官网http://www.mingw.org/上搜索download/installer,点击下载. 如果使用 mingw-w64-install ...