php整理(二): 数组

数组:

  首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的:

    1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;value则是任意数据类型,不仅仅是基本数据类型,引用类型也是可以的,比如说数组;

    2.既然key是数据类型,就有相互转换,当定义key是1.0时,将会被转换成1,等等之类的;当然,key也可以是空,也可以重复,只是后面的会覆盖前面的

    3.由于是弱语言,里边就有很多松散的样子,比如arr[]="value";这也可以存在,会直接创建数组(先理解到这,以后再精确的理解和整理);

定义: PHP 中的 数组 实际上是一个有序映射.映射是一种把values关联到keys的类型.在数组中长度不固定,切能够是任何数据类型. 出于这个原因, 数组有两种类型: 索引数组和关联数组.

  索引数组: 数组中的keys值是integer,即从0开始到(length-1); 可以通过索引直接访问数组中的values;

  关联数组:keys的数据类型是string类型, 也可以通过索引直接访问,只是不能应用到类似于for循环这样的遍历数组之中.

    注:PHP 数组可以同时含有 integer 和 string 类型的键名,因为 PHP 实际并不区分索引数组和关联数组。

 定义语法:

1 $arr_1=array(  keys1 => values1,keys2 => values2
2     //, ...关联数组
3 );
4 $arr_2=array( values1,values2
5    // .....索引数组
6 );
7 // 键(key)可是是一个整数  integer  或字符串  string
8 // 值(value)可以是任意类型的值

    遍历数组:

    1.for循环:由于用到整型才能执行for循环,所以for循环只能用到索引数组中.

      语法:

1 for($i=0;$i<count($arr);$i++){};

    2.foreach:遍历数组,可以遍历任何类型的数组,最为常用的一种.

 1 foreach($arr as $values){ //对值操作
 2     echo $values." ";
 3 };
 4 echo "<br/>";
 5 foreach($arr as $key => $values){ //操作keys和values
 6     echo $key."=>".$values." ";
 7 };
 8 /*
 9 结果:
10 1 2 3 4 aa
11 0=>1 1=>2 2=>3 3=>4 4=>aa
12
13  */

    3.each()和list():

        each():返回数组中当前的键/值对并将数组指针向前移动一步, 在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元(执行最后一个之后,下一次执行将会返回一个空数组)。返回一个数组,包括当前指针下的数组元素的keys和values;

 1 $arr=array(1,2,3,4,"aa");
 2 print_r($arr);
 3 echo "<br/>";
 4 $arr1=array("one"=>10,"two"=>20,"three"=>"aa");
 5 print_r($arr1);
 6 echo "<br/>";
 7 $arr2=each($arr);
 8 print_r($arr2);
 9 echo "<br/>";
10 //执行了3次;
11 $arr3=each($arr1);
12 print_r($arr3);
13 echo "<br/>";
14 $arr3=each($arr1);
15 print_r($arr3);
16 echo "<br/>";
17 $arr3=each($arr1);
18 print_r($arr3); 

结果:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => aa ) 
Array ( [one] => 10 [two] => 20 [three] => aa ) 
Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 )

Array ( [1] => 10 [value] => 10 [0] => one [key] => one ) //指针向前移动了
Array ( [1] => 20 [value] => 20 [0] => two [key] => two ) 
Array ( [1] => aa [value] => aa [0] => three [key] => three )

      list():把数组中的值赋给一些变量 ,像 array() 一样,这不是真正的函数,而是语言结构。 list() 用一步操作给一组变量进行赋值。 list() 仅能用于数字索引的数组并假定数字索引从 0 开始。

 1 $arr=array(1,2,3,4,"aa");
 2 print_r($arr);
 3 echo "<br/>";
 4 $arr1=array("one"=>10,"2"=>20,"three"=>"aa");
 5 print_r($arr1);
 6 list($first,$second,$three)=$arr;
 7 echo "<br>";
 8 echo $first." ".$second." ".$three;
 9 list($first,$second,$three)=$arr1;
10 echo "<br>";
11 echo $first." ".$second." ".$three;//对key不是整数的赋值
12 echo "<br/>";
13 list(,,$three)=$arr;//可以跳过输入,不能不写,用,隔开
14 echo $three;

运行的结果:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => aa ) 
Array ( [one] => 10 [2] => 20 [three] => aa ) 
1 2 3
20
3

 这个地方来回顾一下boolean类型:

这是一个最简单的数据类型

要明确地将一个值转换成 boolean ,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。

参见类型转换的判别。

当转换为 boolean 时,以下值被认为是 FALSE 

  • 布尔值 FALSE 本身
  • 整型值 0(零)
  • 浮点型值 0.0(零)
  • 空字符串,以及字符串 "0"
  • 不包括任何元素的数组
  • 不包括任何成员变量的对象(仅 PHP 4.0 适用)
  • 特殊类型 NULL(包括尚未赋值的变量)
  • 从空标记生成的 SimpleXML 对象

所有其它值都被认为是 TRUE (包括任何资源)。

 1 <?php
 2 var_dump ((bool)  "" );         // bool(false)
 3  var_dump ((bool)  1 );          // bool(true)
 4  var_dump ((bool) - 2 );         // bool(true)
 5  var_dump ((bool)  "foo" );      // bool(true)
 6  var_dump ((bool)  2.3e5 );      // bool(true)
 7  var_dump ((bool) array( 12 ));  // bool(true)
 8  var_dump ((bool) array());    // bool(false)
 9  var_dump ((bool)  "false" );    // bool(true)
10  ?> 

这样我们可以利用这一点来用list()和each()来输出数组,和foreach的功能是一样的,可以访问两种数组

1 while (list($key,$value)=each($arr)){//这个地方就是当为空的时候停止
2     echo $key."=>".$value."<br/>";
3 };
4 while (list($key,$value)=each($arr)){//不会再执行,因为指针已经是最后一个
5     echo $key."=>".$value."<br/>";
6 };

运行结果:

0=>1
1=>2
2=>3
3=>4
4=>5

for循环来实现这个功能

1 for($i=0;$i<count($arr);$i++){
2     list($a,$b)=each($arr);
3     echo $a."=>".$b."<br/>";
4 }

运行结果:

0=>1
1=>2
2=>3
3=>4
4=>5

    4.使用指针来遍历数组

   key()-返回数组中的key   

  current() - 返回数组中的当前value

  end() - 将数组的内部指针指向最后一个单元

  prev() - 将数组的内部指针倒回一位

  next()- 将数组的内部指针向前一位

  reset() - 将数组的内部指针指向第一个单元,复原 

  这里边的参数都是要操作的数组 

 1 echo key($arr);//返回当前数组当前指针下的key;
 2 echo "&nbsp;&nbsp;&nbsp;&nbsp;";
 3 echo current($arr);//返回当前数组当前指针下的values;
 4 echo "<br/>";
 5 next($arr);//下移一个指针
 6 echo key($arr);
 7 echo "&nbsp;&nbsp;&nbsp;&nbsp;";
 8 echo current($arr);
 9 echo "<br/>";
10 prev($arr);//前移一个指针
11 echo key($arr);
12 echo "&nbsp;&nbsp;&nbsp;&nbsp;";
13 echo current($arr);
14 echo "<br/>";
15 end($arr);//移到最后一个
16 echo key($arr);
17 echo "&nbsp;&nbsp;&nbsp;&nbsp;";
18 echo current($arr);
19 echo "<br/>";
20 reset($arr);//移到第一个
21 echo key($arr);
22 echo "&nbsp;&nbsp;&nbsp;&nbsp;";
23 echo current($arr);
24 echo "<br/>";

运行结果:

0    1
1    2
0    1
4    5
0    1

组合使用,遍历数组

1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
2 do{
3     echo key($arr)."=>".current($arr)."<br/>";
4 }while(next($arr));

运行结果:

one=>1
two=>2
three=>3
0=>4
1=>5

预定义数组:

  

 常用的函数:

(1)in_array(value,array[,strict=true|false]);-检查数组是不是有某值,返回true 或 false;strict=true严格类型的检查,意思就是:1和"1"是不一样的;错误返回null;

1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
2 var_dump(in_array("1",$arr));//bool(true)
3 var_dump(in_array("1", $arr,true));//bool(false)
4 var_dump(in_array("1", $arr,false));//bool(true)

  (2)array_reverse(array);反转数组,返回一个单元相反的数组

1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
2 print_r($arr);
3 echo "<br/>";
4 print_r(array_reverse($arr));

结果:

Array ( [one] => 1 [two] => 2 [three] => 3 [0] => 4 [1] => 5 ) 
Array ( [0] => 5 [1] => 4 [three] => 3 [two] => 2 [one] => 1 )

  (3)count(array);返回数组元素(键值对)的个数;

1 $arr=array("one"=>1,"two"=>2,"three"=>3,4,5);
2 echo count($arr);// 5

  (4)array_unique();返回一个去重的新数组;

1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
2 $arr1=array_unique($arr);
3 print_r($arr1);//b保留最前边的那个

结果:

Array ( [one] => 1 [two] => 2 [0] => 4 )

  (5)unset(array);没有返回值,只是用来修改 数组----释放给定的变量

 1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
 2 print_r($arr);
 3 echo "<br/>";
 4 unset($arr[‘one‘]);
 5 print_r($arr);
 6 unset($arr);
 7 print_r($arr);//数组已被删除
 8 $a=1;
 9 echo "<br/>";
10 echo $a;
11 unset($a);
12 echo $a;//变量已经被删除
13 //unset($a,$b,$c)一次销毁多个变量

运行结果:

报没有变量的警告,说明变量已经被销毁了

  (6)array_values(array);返回数组中所有的值并给其建立数字索引。

1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
2 print_r($arr);
3 echo "<br/>";
4 print_r(array_values($arr));

运行结果:

  Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 ) 
  Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 4 [4] => 4 )

  (7)array_merge(array1,array2.....);合并多个数组,返回合并后的数组

1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
2 print_r(array_merge($arr,$arr));

运行结果:

Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 [2] => 4 [3] => 4 )

  (8)array_push();在数组的后面加入元素,返回加入元素之后的数组的个数,改变原来的数组

1 $arr=array("one"=>1,"two"=>2,4,"three"=>4,4);
2 print_r($arr);
3 echo "<br>";
4 echo count($arr);
5 echo "<br>";
6 echo array_push($arr, 2);
7 echo "<br>";
8 print_r($arr);

运行结果:

Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 ) 
5
6
Array ( [one] => 1 [two] => 2 [0] => 4 [three] => 4 [1] => 4 [2] => 2 ) php

时间: 2024-08-04 20:15:33

php整理(二): 数组的相关文章

C#与C++数据类型比较及结构体转换(搜集整理二)

原文网址:http://www.blogjava.net/heting/archive/2010/03/20/315998.html C++ C# ===================================== WORD ushort DWORD uint UCHAR int/byte 大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte UCHAR* string/IntPtr unsigned char* [MarshalAs(UnmanagedType

javascript 基础学习整理 二 之 html对象总结,参考W3C

Anchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向输出流写文本 使用 document.write() 向输出流写 HTML 返回当前文档的标题 返回当前文档的 URL 返回当前文档的 referrer 返回下载当前文档的服务器域名 使用 getElementById() 使用 getElementsByName() 打开一个新的文档,添加一些文本,然后

算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).因为用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的非常清楚了,分治法+挖坑法,我就不多说了.就是以某个数为参照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间采取同样的方法进行递归. 就其整

算法整理(二)---高速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下高速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).由于用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的很清楚了,分治法+挖坑法,我就不多说了.就是以某个数为參照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间採取相同的方法进行递归. 就其总体

AJAX学习整理二之简单实例

做了几个简单的实例,加载txt文本内容.加载xml文件内容,把xml文本内容转换成html表格显示.废话不多说,直接贴代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <head>     <title>通过ajax获取文本内容</title>     <meta charset="utf-8">     <scr

Windows Azure 实验培训学习与交流(官方版整理二)

Windows Azure 技术更新比较快,也许有很多人下面的都已看过,为以后我们好回头可以查看,也为还没有看到这些官方材料的小伙伴们带来一些帮助,如下是整理的官方版实验材料都以链接形式呈现,方便大家学习和交流. 微软培训材料下载 http://windowsazure-trainingkit.github.io/index.htm 注:Github作为培训材料的存储库微软所有配套的材料都会及时更新到Github上 目前微软团队已将大部分培训材料翻译成中文 https://github.com/

java面试题整理二(转灰灰+灰灰)

java 开发面试题小整理(二) 51.Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 答:可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调. 52.内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制? 答:一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员. 53.Java 中的final关键字有哪些用法? 答:(1)修饰类:表示该类不能被继承: (2)修饰方法:表示方法不能被重

Linux常见命令整理(二)

权限设置 chmod  改变文件或目录的权限 格式 chmod 参数  文件名 r-读 w-写 x-执行 u-user 所有者 g-group 所属组 o-others 其他人 a-all 所有人 + 添加某个权限 - 取消某个权限 =  赋予给定权限并取消原来所有权限 除此之外,也可以使用数字来表示权限 r = 4 w = 2 x = 1 例如:chmod 777 a 代表修改文件a的权限是-rwxrwxrwx 其他的权限类似 chown 改变某个文件或目录的所有者 格式 chown 用户 文

c++实验十二 数组(二维)

先通过一个二维数组保存学生相关的信息 为了更直观的观看,决定用字符串数组来保存数据 当然在计算的时候要转变格式, // 实验十二 数组(二维).cpp: 定义控制台应用程序的入口点. #include "stdafx.h" #include<iostream> using namespace std; #include<string> int main() { string a[4][5] = { {"生","号",&qu