指針一旦處于非法位置,沒有參照物了,無法上移和下移.但是可以end()和reset()
當一個數組復制的時候,指針也跟著復制,當指針在非法區域時,先輸出誰,誰就先初始化,另一個非法
current():返回當前數組指針處元素的值,不移動指針
key():返回當前數組指針處元素的下標,不移動指針
next():返回下一個數組元素的值,并將指針下移一行
prev():返回上一個數組元素的值,并將指針回退一步
end():返回最后一個數組元素的值,并將指針移到數組最后一個元素
reset():返回第一個數組元素的值,并將指針移到第一個元素上
each():取一個數組的”當前單元”的下標和值(并放入一個數組),然后將指針移到下一個單元//是引用傳遞,改變each里面的值,原數組會發生改變
例:$arr4=array(1=>3,”a1”=>11,3=>5); $result1=each($arr4); $result2=each($arr4);
//$result1值為array(1=>3,value=>3,0=>1,key=>1);
//$result1值為array(1=>11,value=>11,0=>a1,key=>a1);
list():用于一次性取得從0開始的數字下標的多個單元的值,把這些值賦給一些變量
例如:list($變量1,$變量2,---)=$數組
遍歷數組
for($i=0; $i<count($len); ++$i )
{$key=key($arr4); $value=current($arr4); echo “<br />$key=>$value”; next($arr4);}
while( list($key,$value)=each($arr) ) { echo “<br />$key=$value”; }
#### foreach循環
foreach($arr as \[$key => \] $value){---} 遍歷過程中變量可以人為設定引用傳遞
foreach($arr as $key => &$value){…} 原數組也改變
遍歷后,指針位置為null,對應值為bool(false)
foreach遍歷的是拷貝之后的數組,在里面修改原數組,拷貝之后的數組沒有發生改變.同理修改$value的值原數組沒有發生改變
foreach里面操作修改是原數組中改變,比如unset,能把原數組刪空,但是foreach還能遍歷
foreach遍歷中指針處于不確定狀態,如果foreach后還要對指針操作,建議把指針初始化
#### 寫時復制COW
copy on write
當一個變量復制另一個變量的時候,其實并沒有直接去開辟一個空間,只有當其中一個變量進行寫操作的時候,另一個變量才會去開辟空間。
##### 模擬計算機內存去演示寫時復制
memory\_get\_usage(): 獲取當前代碼占用的計算機內存。
array\_fill(startnum,num,value): 創建一個數組元素,startnum代表開始第一個元素的下標,num代表數組中一共有多少個元素,value給所有元素統一賦值。

例題:
$arr=array('天','地','玄','黃');
foreach($arr as $key=>$value){
}
var\_dump(current($arr));
//指針處于非法位置
$arr=array('天','地','玄','黃');
foreach($arr as $key=>$value){
$arr\[2\]='王';
}
var\_dump(current($arr));
//指針指向地
$arr=array('天','地','玄','黃');
foreach($arr as $key=>$value){
if($key==1){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指針指向王
$arr=array('天','地','玄','黃');
foreach($arr as $key=>$value){
if($key==2){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指針指向黃
$arr=array('天','地','玄','黃');
foreach($arr as $key=>$value){
if($key==3){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指針指向天
$arr=array('天','地','玄','黃');
foreach($arr as $key=>$value){
if($key==4){
$arr\[2\]='王';
}
}
var\_dump(current($arr));
//指針指向false
- PHP
- 頁面跳轉
- 數據類型和運算符
- 整形
- 浮點型
- 字符串型
- 布爾型
- 判斷數據類型
- 傳值
- 類型轉換
- 常量
- 進制轉換
- 運算符
- 各種結構
- 數組
- 分類
- 創建
- 多維數組
- 數組操作函數
- 數組指針
- 排序
- 數組交換需要注意的
- 函數
- 創建函數
- 參數傳遞
- 參數數量問題
- 返回值
- 可變函數
- 匿名函數
- 冒泡,選擇,二分
- 變量的作用域
- 局部作用域中使用全局
- use
- 有關函數的系統函數
- 遞歸
- 遞推(迭代)
- 面向對象
- 類和對象
- 值傳遞
- 引用傳遞
- 成員
- 構造和析構調用上級同類方法
- 重寫
- 最終類
- 最終方法
- 設計模式
- 抽象類
- 抽象方法
- 抽象類和抽象方法的細節
- 重載
- 接口
- 類和接口的總結
- 自動加載
- 克隆
- 對象的遍歷
- 內置標準類
- 其他類型轉對象類型
- 類型約束
- 魔術方法
- static關鍵字
- 命名空間
- 子級空間
- 引入機制
- 公共空間
- 使用注意
- 錯誤處理
- 錯誤的觸發
- 錯誤報告的顯示
- 錯誤日志的記錄問題
- 自定義錯誤處理器
- 異常拋出
- 文件鎖
- 文件處理
- 序列化與反序列化
- 目錄操作
- 文件操作
- 文件上傳
- $_FILFS
- 多文件上傳處理
- 繪圖技術
- 創建畫布資源
- 操作畫布
- 導出
- 銷毀資源
- 驗證碼
- 補充文件居中
- 在圖像上寫入一行TTF字體的文本
- 獲得圖像相關信息
- 水印
- 等比例縮放
- 常見錯誤
- HTTP協議
- URL的構成
- 請求
- 防盜鏈
- 響應
- 使用header()禁用緩存
- 下載文件的HTTP響應頭
- 文件下載
- HTTPS
- 會話技術
- cookie
- session
- PHP操作MySQL函數
- 登錄
- 一些函數
- 從結果集中取出一行數據
- 獲取行數,列數,字段名
- 安全
- 緩存
- 補充
- MySQL
- 語法
- 備份和恢復
- 注釋
- 語句行
- 字符集
- 校驗級
- 存儲引擎
- 數據庫操作
- 創建數據庫
- 刪除數據庫
- 顯示數據庫
- 修改數據庫
- 數據類型
- 整數類型
- 小數類型
- 日期時間型
- 字符和文本型
- enum類型
- set類型
- 時間類型
- 表操作
- 創建
- 索引
- 約束
- 表選項列表
- 表的其他語句
- 視圖語法
- 增刪改查
- 插入數據(增)
- 刪除數據(刪)
- 修改數據(改)
- 查詢(查)
- 用戶和權限管理
- 用戶管理
- 權限管理
- PDO
- 與PDO相關的幾個類
- 連接數據庫
- 使用
- PDO的錯誤處理
- PDO結果集對象
- pdo結果集對象的常用方法
- PDO預處理
- 常用屬性
- mysql編程
- 事務
- 語句塊
- mysql中的變量
- (存儲)函數
- 存儲過程procedure
- 觸發器(trigger)
- mysql優化
- 存儲引擎
- 字段類型
- 逆范式
- 索引
- Memcache
- 與redis區別
- 安裝
- php開啟擴展
- php操作memcache
- Key的命名
- 有效期
- 各種數據類型存儲
- 刪除
- 第三個參數壓縮作用
- 其他相關操作方法
- 終端命令操作方式
- 獲取memcache統計信息
- Git
- 創建一個git倉庫
- 添加
- 修改文件
- 刪除文件
- 克隆
- 個人網站
- Ajax
- 發起請求
- 接受響應
- 常用屬性和方法
- get和post
- get
- post
- 同步和異步
- 什么時候使用同步請求?
- 分頁
- xml的接收和處理
- JSON
- 無刷新表單提交和進度條
- JQuery操作ajax
- iframe
- 郵件
- 介紹
- 發送郵件
- 直投郵件
- 中轉郵件發送
- phpmailer
- 正則表達
- 簡單使用
- preg_match()
- 正則內容
- 定義字符集
- 特別字符集
- 組合字符集
- 限制字符
- 模式修正符
- 進行全局匹配