深入了解PHP中的Array数组和foreach

1. 了解数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。详细的解释可参见:PHP.net中的Array数组    。

2.例子:一般的数组

这里,我通过一个简单的例子,并使用图形方式来了解数组。

$a = array(3 => 'a', 1 => 'b', 2 => 'c');

echo var_dump($a);

[注]:使用箭头描述数组$a各个单元对应某一内存地址的数据值(实际上,它内部结构采用HashTable结构,可以参考鸟哥写的PHP中的Hash算法)。

3.例子:在数组定义中,添加引用。

$x = 'x';
$a = array(3 => 'a', 1 => &$x, 2 => 'c');

echo "<hr>";
echo var_dump($a);

$x = 'y';
echo var_dump($a);

数组$a中的第2个单元$a[1]与$x对应的是同一个数据,使用var_dump($a)的时候,会看到数组的第2个单元多个&符号,即&string(1) "x",表示引用。

当 修改$x的值='y',也等同于修改$a[1]的值='y'。

下图可以清楚的描述这一变化:

4.例子:使用foreach遍历数组。

$a = array(3 => 'a', 1 => 'b', 2 => 'c');

echo "<hr>";
foreach ($a as $key => $value) {
  echo "$key => $value <br>";

}

每次循环中,当前数组中单元的值被赋给 $value ,单元的key被赋给$key。如下图描述:

【注:】灰色虚箭头表示赋予某一值。

5.例子:在foreach遍历数组中,使用引用赋值。

$a = array(3 => 'a', 1 => 'b', 2 => 'c');

echo "<hr>";
foreach ($a as $key => &$value) {
  $value.='n';
  echo "$key => $value <br>";

}

每次循环中, $value 都指向当前数组中单元的值,再执行“ $value.='n'; ”代码 ,如下图描述:

6.例子:对例子5的进一步分析。

在例子5,foreach遍历数组完成后,不会自动销毁$value变量,与数组$a最后一个单元$a[2]指向同一个数据。

这时候改变$value的值,也就是改变了$a[2]的值。

$value='m';

echo "<hr>";
echo "\$value=$value <br>";
echo var_dump($a);

实例验证, 数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。

7.小结

以上例子,只是描述php中的array数组和foreach的一些特性。学习最后,感觉php中的array数组和foreach不同于别的编程语言,不能使用类似C语言的结构分析PHP。

以上就是小编为大家带来的深入了解PHP中的Array数组和foreach全部内容了,希望大家多多支持我们~

(0)

相关推荐

  • JS中Array数组学习总结

    引用类型分为Object类型(所谓的对象),Array类型(本文谈的数组),Function类型等. 那么,数组是干啥的呢?在我看来,它是用来保存数据的. 一.声明一个数组: 1.构造函数 var colors=new Array():简写的话可以省略new,即var colors=Array(); 2.数组字面量 var colors=["black","green","pink"]; 二.读取和设置数组的值: 读取:colors[x];参数x

  • 浅谈mwArray和一般数组的区别

    可以用下面的代码详细理解mwArray和一般数组之间的区别 mwArray a(3, 2, mxDOUBLE_CLASS); double *aData; aData = new double[6]; int iii; for( iii=0; iii<6; ++iii) { aData[iii] = iii+1; } // print output std::cout << "a = " << std::endl; std::cout << a

  • 数组Array的一些方法(总结)

    数组对象属性和方法的概述: 1> arr.push() 将参数添加至数组的末尾,返回的是新数组的长度 2> arr.unshift() 将参数添加到数组的开头,返回新数组的长度 3> arr.shift() 删除数组的第一位,返回被删除的数字 4> arr.pop() 删除数组的最后一位,返回被删除的数字 5> arr.concat()将参数里面的数字合并到原数组后面,不改变原有的数组,返回一个新数组 6> arr.reverse() 翻转数组,改变原有的数组 7>

  • 深入了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我通过一个简单的例子,并使用图形方式来了解数组. $a = array(3 => 'a', 1 => 'b', 2 => 'c'); echo var_dump($a); [注]:使用箭头描述数组$a各个单元对应某一内存地址的数据值(实际上,它内部结构采用HashTable结构,可以参考鸟哥写

  • Javascript中的Array数组对象详谈

    首先数组的定义以及初始化的方法: var myArray = new Array(1,3.1415,"love"); //这里注意myArray数组中的元素不只是同一种数据类型的元素,可以有整形,有浮点型,有字符串等等都可以.这里充分展示了javascript作为一种语言对数据类型的弱化,语言更加的随意化,简便化.就行定义对象的时候用var一样. 在此介绍的有限,同时有一些我没有给出结果,希望大家自己体会,自己动手尝试一下,看看结果到底是什么,这样有助于记忆.以下带[]是可以省去的参数

  • 详解Python中的array数组模块相关使用

    初始化 array实例化可以提供一个参数来描述允许那种数据类型,还可以有一个初始的数据序列存储在数组中. import array import binascii s = 'This is the array.' a = array.array('c', s) print 'As string:', s print 'As array :', a print 'As hex :', binascii.hexlify(a) 数组配置为包含一个字节序列,用一个简单的字符串初始化. >>> =

  • 浅析JavaScript中的array数组类型系统

    前面的话 数组是一组按序排列的值,相对地,对象的属性名称是无序的.从本质上讲,数组使用数字作为查找键,而对象拥有用户自定义的属性名.javascript没有真正的关联数组,但对象可用于实现关联的功能 Array()仅仅是一种特殊类型的Object(),也就是说,Array()实例基本上是拥有一些额外功能的Object()实例.数组可以保存任何类型的值,这些值可以随时更新或删除,且数组的大小是动态调整的 除了对象之外,数组Array类型可能是javascript中最常用的类型了.而且,javasc

  • javascript中的array数组使用技巧

    复制代码 代码如下: var array = new Array(["no1","no2"]); array["po"] = "props1"; alert(array[0][0]); alert(array.length); //2 //对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此) alert(array[0] + "_" + array[&

  • PHP中的array数组类型分析说明

    php的数组的key 可以是string类型也可以是integer类型.如果key为一个float类型,会自动的转化为integer类型. 如果没有为一个value指定一个key,integer类型的索引的最大值已经给出的话,新key就是这个最大值加1.如果这个新key已经被赋值,那么这个value将会被覆盖掉. 复制代码 代码如下: <?php $arr = array('a','b',5=>'c','d','e',6=>'g'); echo '<pre>'; print_

  • PHP中多维数组的foreach遍历示例

    复制代码 代码如下: <?php //声明一个三维数组 $info=array( "user"=>array( array(1,"zhangsan",20,"nan"), array(2,"lisi",20,"nan"), array(3,"wangwu",25,"nv") ), "score"=>array( array(1,1

  • java mybatis如何操作postgresql array数组类型

    目录 我定义了几个基础数据类型的数组 java mybatis操作 postgresql array数组类型备忘 找了半天没有找到postgresql中关于array数组类型的字段如何对应到java中的数据类型,后来找到了mybatis的TypeHandler,只要实现一个自定义的TypeHandler就行了,如下, 我定义了几个基础数据类型的数组 public class ArrayTypeHandler extends BaseTypeHandler<Object[]> { private

  • javascript中Array()数组函数详解

    在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. Array()是一个用来构建数组的内建构造器函数.数组主要由如下三种创建方式: array = new Array() array =

  • js删除Array数组中指定元素的两种方法

    本节内容: js删除Array数组中指定元素 方法一, /* * 方法:Array.remove(dx) 通过遍历,重构数组 * 功能:删除数组元素. * 参数:dx删除元素的下标. */ Array.prototype.remove=function(dx) { if(isNaN(dx)||dx>this.length){return false;} for(var i=0,n=0;i<this.length;i++) { if(this[i]!=this[dx]) { this[n++]=

随机推荐