PHP判斷鍵值陣列是否存在,使用empty或isset或array_key_exists
轉自:http://www.cnblogs.com/bourneli/archive/2012/10/12/2721634.html
一個例子
猜猜看,下面的例子會輸出什麼?
1234567891011121314 | <?php $a = array( 'a' =>1, 'b' =>0, 'c' =>NULL); echo 'a test by empty: ' , empty($a[ 'a' ]) ? 'not exist' : 'exist' , PHP_EOL; echo 'a test by isset: ' , isset($a[ 'a' ]) ? 'exist' : 'not exist' , PHP_EOL; echo 'a test by array_key_exists: ' , array_key_exists( 'a' , $a) ? 'exist' : 'not exist' , PHP_EOL, PHP_EOL; echo 'b test by empty: ' , empty($a[ 'b' ]) ? 'not exist' : 'exist' , PHP_EOL; echo 'b test by isset: ' , isset($a[ 'b' ]) ? 'exist' : 'not exist' , PHP_EOL; echo 'b test by array_key_exists: ' , array_key_exists( 'b' , $a) ? 'exist' : 'not exist' , PHP_EOL, PHP_EOL; echo 'c test by empty: ' , empty($a[ 'c' ]) ? 'not exist' : 'exist' , PHP_EOL; echo 'c test by isset: ' , isset($a[ 'c' ]) ? 'exist' : 'not exist' , PHP_EOL; echo 'c test by array_key_exists: ' , array_key_exists( 'c' , $a) ? 'exist' : 'not exist' , PHP_EOL, PHP_EOL; |
輸出結果如下:
========================================================
a test by empty: exist
a test by isset: exist
a test by array_key_exists: exist
b test by empty: not exist
b test by isset: exist
b test by array_key_exists: exist
c test by empty: not exist
c test by isset: not exist
c test by array_key_exists: exist
========================================================
注意紅色高亮部分
三種方式的語法區別
- empty: 引數為0或為NULL時(如上面列子),empty均返回TRUE,詳細情況可以參見empty官方手冊
- isset: 引數為NULL時,返回FALSE,0與NULL在PHP中是有區別的,isset(0)返回TRUE
- array_key_exists: 純粹的判斷陣列鍵值對是否存在,無論值是多少
所以,從準確性的角度來看,array_key_exists是最準確的!
三種方式的效能比較
從網上拿到一組資料,參見這裡或參考資料,如下所示:
For a small array:
array_key_exists: float(0.18357992172241)
empty: float(0.072798013687134)
isset: float(0.070242881774902)
For a relative big array:
array_key_exists: float(0.57489585876465)
empty: float(0.0068421363830566)
isset: float(0.0069410800933838)
可以看到在大資料情況下,empty和isset的效能比array_key_exists快了2個數量級,差別還是很大。如果頻繁判斷,還是需要優化。產生這麼大效能差別的原因,個人猜測,可能是isset和empty作為php語法結構不是函式,php直譯器做了優化,而array_key_exists作為函式,沒有相關優化。具體原因,有待通過原始碼考究。
三種方式的使用建議
(鑑於empty與isset效能類似,但是isset準確性較高,這裡就只比較isset與array_key_exists)
- 如果陣列不可能出現值為NULL的情況,建議使用isset
- 如果陣列中經常出現值為NULL的情況,建議使用array_key_exists
- 如果陣列中可能出現值為NULL,但是較少的情況,建議結合isset與array_key_exists使用,如“if (isset($arr[‘key’]) || array_key_exists(‘key’, $arr)){/*do somthing*/}”。此方法兼顧了效能和準確性,但是程式碼變長了。
參考資料
相關推薦
PHP判斷鍵值陣列是否存在,使用empty或isset或array_key_exists
轉自:http://www.cnblogs.com/bourneli/archive/2012/10/12/2721634.html一個例子 猜猜看,下面的例子會輸出什麼? 1234567891011121314<?php$a = array('a'=>1,
函數內new申請一個不定值的內存,在函數外部怎麽釋放
aso aip lfa weibo 內存 htm atq acl sina 顯肪脅nf4km揮窗賀http://tushu.docin.com/sina_6372928933勻木摯h1yso岡祭殺http://huiyi.docin.com/vsbj275盞伎錐xcjeo瞎
動態放入後臺給的鍵值對顯示出來,然後動態返回資料(難點:資料格式問題)
一、動態放入後臺的值 將'應發'下的鍵資料${key}放入html中,記得使用轉義字元 `` ,這個符號實在鍵盤左上角的第二列第一個,來表示裡面寫的是html格式的程式碼。 然後 ${this.data.data['應發'][i][key]}是遍歷每行的key對應的值,
PHP 判斷二維陣列中是否存在某個陣列
function multidimensional_search($parents, $searched) { if (empty($searched) || empty($parents)) { return false; } foreach ($pa
PHP判斷手機是IOS還是Android,判斷是否是微信開啟
本文介紹了PHP判斷手機是IOS還是Android的三個小例項,要判斷使用者的手機是安卓的還是ios的,搜了一下相關的資料,最終獲得的結果分享給大家。 例項1:主要是要用到HTTP_USER_AGENT,它表示的意思是用來檢查瀏覽頁面的訪問者在用什麼作業系統(包括版本號)瀏
資料庫參考,鍵值(Key-value)資料庫,列式儲存,文件型資料庫,圖型資料庫
【TechTarget中國原創】DB-Engines網站專門提供資料庫管理系統流行度的排名資訊,這個排名主要根據5個因素來進行:Google以及Bing搜尋引擎的關鍵字搜尋數量、Google Trends的搜尋數量、Indeed網站中的職位搜尋量、LinkedIn中提到關鍵字的個人資料數以及Stacko
Mysql 如何將結果變為二維鍵值陣列
<?php $conn = mysql_connect("localhost","zhouchenglin","zhouchenglin"); mysql_select_db
php陣列根據某一個鍵值,把相同鍵值的合併生成一個新的二維陣列
php陣列根據某一個鍵值,把相同鍵值的合併生成一個新的二維陣列 <?php $infos = array( array( 'a' => 36, 'b' => 'xa', 'c' => '2015-08-28 00:00:00', 'd' => '2
php從一個數組中刪除多個元素,獲取陣列鍵值對等……
$array1 = array(1,2,3,4,5,6); $array2 = array(2,3); //1、獲取陣列鍵值對 $arr1 = array_keys($array2); var_dump($arr1); Array ( [0] => 0 [1] =&g
php二維陣列按某個鍵值排序(突然用到以往知識,算是臨時補充筆記吧)
print_r($arr);排序後Array ( [0] => Array ( [name] => 6 [age] => 21 ) [1] => Array (
php 陣列分組 二維陣列中,將某個鍵值相同的合併到一個數組中
php 陣列分組 二維陣列中,將某個鍵值相同的合併到一個數組中,下面是示例程式碼。 //原陣列 $arr = array ( 0 => array ( 'initial' => 'A',
php 根據陣列中的指定鍵值排序,根據陣列中指定鍵值分組
一、 根據陣列中的指定鍵值排序1.1 原陣列如下: $person = array( array('id'=>1,'name'=>'fj','weight'=>100,'height'=>180),
php獲取多維陣列某個特定鍵(陣列下標)的所有值,具體總結下其餘的方法
1、專案中經常會用到獲取多維陣列某個特定鍵的所有值,經常的做法是迴圈獲取,今天在網上看到一個不用迴圈獲取的辦法。 /* author: [email protected] description: 根據某一特定鍵(下標)取出一維或多維陣列的所有值;不用迴圈的理由是考慮大陣
MySQL第二天(MySQL鍵值,MySQL存儲引擎)
646day02一、MySQL鍵值(key) ##設置在字段上,約束如何給字段賦值。 普通索引 index唯一索引 unique主鍵 primary key外鍵 foreign key 全文索引 fulltext ++++++++++++++++++++++++++++++++++
php合併陣列並保留鍵值的方法
php合併陣列,一般會使用array_merge方法。 array_merge — 合併一個或多個數組 array array_merge ( array $array1 [, array $... ] ) array_merge 將一個或多個數組的單元合併起來,一個
php 對二位陣列按某個鍵值排序
<?php $arr = array( array('id'=>2,'price'=>100,'num'=>1), array('id'=>3,'price'=>123,'num'=>1), array('id'=>6,'price'=>11
php陣列常用的鍵值處理函式
陣列函式__鍵值操作: 1.array_values($arr): 返回元素值組成的新陣列(索引) 2.array_column($arr,$col, $index): 返回多維陣列中的一列,可指定鍵或索引 3.array_keys($arr,$val,$bool): 返回鍵名組成的新陣列 4.
PHP foreach遍歷陣列之如何判斷當前值已經是陣列的最後一個
先給出foreach的兩種語法格式 1,foreach (array_expression as $value) statement 2,foreach (array_expression as $key => $value) statement 第一種格式
php如何實現數組合並但鍵值相同的陣列不互相覆蓋?
數組合並array_merge($arr1,$arr2)和陣列相加$arr1+$arr2的區別:數字索引陣列:array_merge:合併生成的陣列的索引統一從0開始,所以不存在覆蓋的情況."+"操作符:不改變數字索引,如果索引已經存在,則跳過該元素.字元索引陣列:array_merge:如果兩個陣列存在相同
PHP通過二維陣列鍵值獲取一維鍵名
有如下既定陣列: $inviteType = [ '掃碼' => [ 'type' => 0, 'point' => 5, ],