成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

慎用PHP的unset、array_unique方法

muzhuyu / 540人閱讀

摘要:當我們使用的時候,會導(dǎo)致數(shù)據(jù)結(jié)構(gòu)不一致。而當方法執(zhí)行后,數(shù)組會去除相應(yīng)索引下標指定的值,并且不會重置索引。官方文檔介紹如下返回數(shù)組中所有的值說明返回數(shù)組中所有的值并給其建立數(shù)字索引。

背景

在日常工作中,可能會經(jīng)常遇到一些PHP的代碼場景,需要我們?nèi)コ龜?shù)組中的某個項,通常會直接調(diào)用unset方法,但是如果用得不妥,會給自己挖坑

1.實操

以下使用具體例子進行證明
假設(shè)有數(shù)組如下值:

$age_arr=[0,12,43,34,24,63,90];

1).設(shè)定場景是去除年齡為0的數(shù)值.簡單方法如下:

foreach($age_arr as $k=>$age){
    if($age==0){
        unset($age_arr[$k]);
    }
}

2).設(shè)定場景取去除0值之后的數(shù)組中的第一個人的年齡

$first_people=$age_arr[0];

結(jié)果會報錯,Undefined offset: 0

2.剖析

為什么會報錯呢?帶著疑問,我們嘗試輸出unset前后的數(shù)組,查看其的區(qū)別

$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)."
";

輸出結(jié)果:

unset前 :[0,12,43,34,24,63,90]
unset后 :{"1":12,"2":43,"3":34,"4":24,"5":63,"6":90}

由上可得知,對數(shù)組進行unset操作的時候,PHP會將數(shù)組轉(zhuǎn)化為關(guān)聯(lián)數(shù)組。當我們使用json_encode的時候,會導(dǎo)致數(shù)據(jù)結(jié)構(gòu)不一致。而當unset方法執(zhí)行后,數(shù)組會去除相應(yīng)索引下標指定的值,并且不會重置索引。如上結(jié)果可知原先下標為0的已經(jīng)沒了,但為1的不會變成0.

3.深入研究

我們接下來調(diào)用其他PHP的數(shù)組相關(guān)方法進行驗證,看其他方法是否能正常反饋結(jié)果
除了unset會去除數(shù)組項外,array_unique方法會去除重復(fù)項,以下方法演示:

$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)."
";

結(jié)果:

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}

由上可得知,對數(shù)組進行array_unique操作的時候,PHP會將數(shù)組轉(zhuǎn)化為關(guān)聯(lián)數(shù)組。而當array_unique方法執(zhí)行后,數(shù)組會去除相應(yīng)索引下標指定的值,并且不會重置索引。如上結(jié)果可知原先下標為6的已經(jīng)沒了,但為7的不會變成6.

故當使用unset、array_unique時,都會轉(zhuǎn)換成關(guān)聯(lián)數(shù)組,后續(xù)邏輯如使用中括號索引取值,必然會有問題,需謹慎!

4.解決辦法

使用array_values方法進行重置索引排序。

官方文檔介紹如下:

array_values

(PHP 4, PHP 5, PHP 7)

array_values — 返回數(shù)組中所有的值

說明

array array_values( array $array)

array_values() 返回 input 數(shù)組中所有的值并給其建立數(shù)字索引。

by KingFer

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30863.html

相關(guān)文章

  • PHP入門數(shù)組操作詳解

    摘要:像其他變量一樣,使用運算符可以改變數(shù)組元素的內(nèi)容。數(shù)組的基本操作定義數(shù)組在中聲明數(shù)組的方式主要有兩種用函數(shù)聲明數(shù)組,直接為數(shù)組元素賦值。 概述要訪問一個變量的內(nèi)容,可以直接使用其名稱。如果該變量是一個數(shù)組,可以使用變量名稱和關(guān)鍵字或索引的組合來訪問其內(nèi)容。 像其他變量一樣,使用運算符=可以改變數(shù)組元素的內(nèi)容。數(shù)組單元可以通過 array[key] 語法來訪問。showImg(https...

    ?xiaoxiao, 評論0 收藏0
  • PHP 學(xué)習(xí)總結(jié)之數(shù)組

    摘要:概述我們知道,在編程語言中,數(shù)組的使用頻率是很高的,幾乎每個腳本都會使用到。循環(huán)缺點遍歷完成之后,不能對數(shù)組進行第二次遍歷數(shù)組內(nèi)部指針指向了最后一個元素。 概述 我們知道,在 PHP 編程語言中,數(shù)組的使用頻率是很高的,幾乎每個腳本都會使用到。 PHP 自帶了大量的、優(yōu)秀的操作數(shù)組的函數(shù)以供我們使用,本文就對這些數(shù)組函數(shù)的使用做一些分類和總結(jié),方便大家以后查閱。 創(chuàng)建 1. range...

    wangdai 評論0 收藏0
  • PHP數(shù)組操作詳解

    摘要:像其他變量一樣,使用運算符可以改變數(shù)組元素的內(nèi)容。數(shù)組的基本操作定義數(shù)組在中聲明數(shù)組的方式主要有兩種用函數(shù)聲明數(shù)組,直接為數(shù)組元素賦值。 概述 要訪問一個變量的內(nèi)容,可以直接使用其名稱。如果該變量是一個數(shù)組,可以使用變量名稱和關(guān)鍵字或索引的組合來訪問其內(nèi)容。 像其他變量一樣,使用運算符=可以改變數(shù)組元素的內(nèi)容。數(shù)組單元可以通過 array[key] 語法來訪問。 showImg(...

    Guakin_Huang 評論0 收藏0
  • PHP 引用是個坑,請慎用

    摘要:發(fā)布時最大的變動是對象處理方式。這很容易被誤解為引用,但是存儲器的引用與引用是完全不同的概念。使用引用是一件不好的事情,除了引用本身不好,并且還會使性能下降這個事實外,使用引用這種方式會使得代碼難以維護。 showImg(https://segmentfault.com/img/remote/1460000014082570); 去年我參加了很多次會議,其中八次會議里我進行了相關(guān)發(fā)言,...

    dockerclub 評論0 收藏0
  • PHP基礎(chǔ)知識小結(jié)

    原始數(shù)據(jù)類型(9種) 基本數(shù)據(jù)類型: 整形(integer)、浮點型(float)、字符串(string)、布爾型(boolean) 復(fù)合數(shù)據(jù)類型:數(shù)組(array)、對象(object)、callable(可調(diào)用) 特殊數(shù)據(jù)類型:資源類型(resource) 和 NULL 變量相關(guān)處理函數(shù) is_bool($var)????????判斷是否為布爾型 is_int($var)????...

    RancherLabs 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<