php 数组 指针,php之数组指针详解
本文主要和大家分享php之数组指针详解,首先我们会和大家分享php 数组指的针操作方法,希望能帮助到大家。
一、php 数组指针操作
利用php的内置函数:key,current,next(),prev()移动到上一个,
reset()重置,移动到第一个元素,end()移动到最后一个元素上
注意一旦指针位置非法,则不能做相对移动(next,prev),可以绝对移动(reset,end),reset,使用频率较高!
each(),集合了 key,current,和next三者的功能!将当前元素信息获得后,移动指针到下一个元素上!
元素信息数组 = each($arr).移动指针
注意,元素信息数组,是两种表示方案:索引和关联。
其中:索引:0,1分别 表示 键和值,关联:key,value分别表示 键和值
二、常用的指针遍历方法
each+while+list遍历数组
list-each遍历数组
升级化操作:
将获得键变量和值变量的操作,简化!
利用 list结构
利用一个索引数组,同时初始化多个变量!
each的返回值就包含了索引数组0为键,1为值!
利用list简化的结果:
其实:只要有循环结构,指针操作就可以完成遍历数组
三、数组的指针问题讨论
考虑复制时的指针位置问题:
如果原数组指针已经非法了呢?
再看:
问题是,复制后,谁先 执行的current,哪个数组指针被初始化!
该现象的原因是:
1, 如果数组指针位置非法,复制时,会将新数组指针初始化!
2, 值传递时,PHP采用了一个 COW(写时复制,copy on write)的优化措施!
写时复制的两个要点:
在值传递时,并没有马上为新变量开辟值空间,而在两个变量都未发生改变之前,还是使用的一个值空间
一旦某个变量发生改变,此时会复制值空间,让发生改变的变量去引用新的空间!
注意,current也会发出写操作,导致空间被复制!先current谁,谁是那个新的,指针被初始化!
foreach时
1, 遍历的是拷贝而不是原数组!
2, 只有在原数组发生写操作时,才会真正的拷贝。此时原数组指针停留在当前位置,如果已经非法,则会初始化!
相关推荐:
php 数组 指针,php之数组指针详解相关推荐
- java的数组与Arrays类源码详解
java的数组与Arrays类源码详解 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 类的 ...
- c语言指针用法及实际应用详解,通俗易懂超详细
c语言指针用法及实际应用详解,通俗易懂超详细! \\\插播一条:文章末尾有惊喜哟~/// 今天给大家来讲解一下指针. 我会由浅到深,最后联合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛 ...
- Python Numpy多维数组.sum(axis=0/1/2...) 详解
Python Numpy多维数组.sum(axis=0/1/2-) 详解 numpy中axis取值的说明 首先对numpy中axis取值进行说明:一维数组时axis=0,二维数组时axis=0,1,维 ...
- php 去重_php求两数组交集的四种方法详解
题目:给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1],nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5 ...
- TIA博途中数组Array的基本使用方法详解
TIA博途中数组Array的基本使用方法详解 ARRAY类型是由数目固定且数据类型相同的元素组成的数据结构. ARRAY类型的定义和使用需要注意以下几点: • ARRAY类型可以在DB.OB/FC/F ...
- 西门子触摸屏HMI变量的指针化索引应用示例详解
西门子触摸屏HMI变量的指针化索引应用示例详解 在实际HMI组态项目时,若有多台相同的设备的参数需要查看或显示时,可以使用变量的指针化索引功能来实现,优点是减少画面上IO域的数量,显示画面更简洁,具体 ...
- python定义数组并赋值_python中的数组赋值与拷贝的区别详解
具体的注解我已经写在了程序里面:通俗的解释了python里面的浅拷贝与深拷贝的不同,请看程序. # -*- coding: utf-8 -*- import numpy as np import co ...
- c语言指针用法及实际应用详解,通俗易懂超详细!
大家好,我是无际. 今天给大家来讲解一下指针. 我会由浅到深,最后结合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛! 长文预警!全文大约5200多字,学指针看这篇文章就够了! 很多人跟 ...
- 指针应用——八大笔试题详解
目录 前言 正文 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 总结 鸣谢 前言 我们在前面学习了指针初阶.进阶的知识,作为C语言中的重难点,指针有很大的几率出现在面试时的笔试题中, ...
- C语言中函数指针和回调函数的详解
函数指针:指向函数的指针变量. 因此"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译 ...
最新文章
- mysql .net core_MySQL官方.NET Core驱动已出,支持EF Core
- 祁阳一中2021年高考成绩查询,祁阳一中2019高考成绩喜报、一本二本上线人数情况...
- 解决gitosis中authorized_keys不自动更新问题
- VMware 虚拟化编程(9) — VMware 虚拟机的快照
- HDFS HA介绍及配置理解
- 免费Opengrok-代码阅读工具:Kernel,Optee,ATF,Uboot...
- Functions that return a function
- boost::log::dynamic_type_dispatcher用法的测试程序
- 调用第三方接口缴费的通用逻辑
- 无限循环小数转化为分数形式
- jieba中文处理的学习
- 人生长途,感受着不断拼搏...
- 设计模式之工厂方法的重载
- zabbix监控硬盘
- mencoder mencoder 安装使用及常用参数
- SVN学习:SVN的下载安装
- 单片机数码管显示原理
- EDU教育版Office365使用教程(一):邮箱登陆及使用
- 洛谷 P2414 [NOI2011] 阿狸的打字机 题解
- 爬虫基础,搜索引擎原理(个人整理)
热门文章
- C++ Builder 5编HOOK程序
- C++的强制类型转换
- P4 详解各硬件部分
- 【CyberSecurityLearning 41】Linux密码破解以及菜单加密
- 安装已停止,原因是 ProjectType 值的目录不存在。对于您所安装的 Visual St...
- SpringBoot(2.4.0)自动配置原理(源码)
- 为什么wait、notify必须在synchronized保护的同步代码中
- jsp EL表达式比较两个字符串
- springboot学习笔记(六)
- DVRRDK, EZSDK和DVSDK这三者有什么区别