摘要:當我們使用的時候,會導致數據結構不一致。而當方法執行后,數組會去除相應索引下標指定的值,并且不會重置索引。官方文檔介紹如下返回數組中所有的值說明返回數組中所有的值并給其建立數字索引。
背景
在日常工作中,可能會經常遇到一些PHP的代碼場景,需要我們去除數組中的某個項,通常會直接調用unset方法,但是如果用得不妥,會給自己挖坑
1.實操以下使用具體例子進行證明
假設有數組如下值:
$age_arr=[0,12,43,34,24,63,90];
1).設定場景是去除年齡為0的數值.簡單方法如下:
foreach($age_arr as $k=>$age){ if($age==0){ unset($age_arr[$k]); } }
2).設定場景取去除0值之后的數組中的第一個人的年齡
$first_people=$age_arr[0];
結果會報錯,Undefined offset: 0
2.剖析為什么會報錯呢?帶著疑問,我們嘗試輸出unset前后的數組,查看其的區別
$age_arr=[0,12,43,34,24,63,90]; echo "unset前 :".json_encode($age_arr).""; unset($age_arr[0]); echo "unset后 :".json_encode($age_arr)."";
輸出結果:
unset前 :[0,12,43,34,24,63,90] unset后 :{"1":12,"2":43,"3":34,"4":24,"5":63,"6":90}
由上可得知,對數組進行unset操作的時候,PHP會將數組轉化為關聯數組。當我們使用json_encode的時候,會導致數據結構不一致。而當unset方法執行后,數組會去除相應索引下標指定的值,并且不會重置索引。如上結果可知原先下標為0的已經沒了,但為1的不會變成0.
3.深入研究我們接下來調用其他PHP的數組相關方法進行驗證,看其他方法是否能正常反饋結果
除了unset會去除數組項外,array_unique方法會去除重復項,以下方法演示:
$age_arr=[0,12,43,34,24,63,43,90]; echo "array_unique前 :".json_encode($age_arr).""; $age_arr=array_unique($age_arr); echo "array_unique后 :".json_encode($age_arr)."";
結果:
array_unique前 :[0,12,43,34,24,63,43,90] array_unique后 :{"0":0,"1":12,"2":43,"3":34,"4":24,"5":63,"7":90}
由上可得知,對數組進行array_unique操作的時候,PHP會將數組轉化為關聯數組。而當array_unique方法執行后,數組會去除相應索引下標指定的值,并且不會重置索引。如上結果可知原先下標為6的已經沒了,但為7的不會變成6.
故當使用unset、array_unique時,都會轉換成關聯數組,后續邏輯如使用中括號索引取值,必然會有問題,需謹慎!
4.解決辦法使用array_values方法進行重置索引排序。
官方文檔介紹如下:
array_values
(PHP 4, PHP 5, PHP 7)
array_values — 返回數組中所有的值
說明
array array_values( array $array)
array_values() 返回 input 數組中所有的值并給其建立數字索引。
by KingFer
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30863.html
摘要:像其他變量一樣,使用運算符可以改變數組元素的內容。數組的基本操作定義數組在中聲明數組的方式主要有兩種用函數聲明數組,直接為數組元素賦值。 概述要訪問一個變量的內容,可以直接使用其名稱。如果該變量是一個數組,可以使用變量名稱和關鍵字或索引的組合來訪問其內容。 像其他變量一樣,使用運算符=可以改變數組元素的內容。數組單元可以通過 array[key] 語法來訪問。showImg(https...
摘要:概述我們知道,在編程語言中,數組的使用頻率是很高的,幾乎每個腳本都會使用到。循環缺點遍歷完成之后,不能對數組進行第二次遍歷數組內部指針指向了最后一個元素。 概述 我們知道,在 PHP 編程語言中,數組的使用頻率是很高的,幾乎每個腳本都會使用到。 PHP 自帶了大量的、優秀的操作數組的函數以供我們使用,本文就對這些數組函數的使用做一些分類和總結,方便大家以后查閱。 創建 1. range...
摘要:像其他變量一樣,使用運算符可以改變數組元素的內容。數組的基本操作定義數組在中聲明數組的方式主要有兩種用函數聲明數組,直接為數組元素賦值。 概述 要訪問一個變量的內容,可以直接使用其名稱。如果該變量是一個數組,可以使用變量名稱和關鍵字或索引的組合來訪問其內容。 像其他變量一樣,使用運算符=可以改變數組元素的內容。數組單元可以通過 array[key] 語法來訪問。 showImg(...
摘要:發布時最大的變動是對象處理方式。這很容易被誤解為引用,但是存儲器的引用與引用是完全不同的概念。使用引用是一件不好的事情,除了引用本身不好,并且還會使性能下降這個事實外,使用引用這種方式會使得代碼難以維護。 showImg(https://segmentfault.com/img/remote/1460000014082570); 去年我參加了很多次會議,其中八次會議里我進行了相關發言,...
原始數據類型(9種) 基本數據類型: 整形(integer)、浮點型(float)、字符串(string)、布爾型(boolean) 復合數據類型:數組(array)、對象(object)、callable(可調用) 特殊數據類型:資源類型(resource) 和 NULL 變量相關處理函數 is_bool($var)????????判斷是否為布爾型 is_int($var)????...
閱讀 2572·2021-09-23 11:21
閱讀 1882·2021-09-22 15:15
閱讀 970·2021-09-10 11:27
閱讀 3440·2019-08-30 15:54
閱讀 651·2019-08-30 15:52
閱讀 1335·2019-08-30 15:44
閱讀 2349·2019-08-29 15:06
閱讀 2972·2019-08-28 18:21