本篇為PHP系列。
in_array
跟 array_key_exists
都是經常使用的 PHP 函式,被用來尋找 array 中是否存在某個東西。
但一樣都是尋找,兩者找東西的方法有什麼不一樣呢?
這邊就直接開門見山講答案,
in_array:檢查的是「值 value」是否存在;
array_key_exists:檢查的是「鍵 key」或「索引 index」是否存在。
如果不懂「值」跟「鍵」的差別可以繼續往下看哦。
「值」跟「鍵」的差別
要回答這個問題,要先回過頭來看 PHP Array 的結構。PHP Array 是由多組 key => value
所構成的一種資料結構:
array(
key => value,
key2 => value2,
key3 => value3,
...
)
實際上使用方式如下:
$scores = array(
"jack" => 75,
"tom" => 95,
"annie" => 80
);
或是利用 []
縮寫:
$scores = [
"jack" => 75,
"tom" => 95,
"annie" => 80
];
因此,上面範例中,jack
、tom
、annie
等名字,就是 key
,他們個別的分數 75
、95
、80
就是 value
。
當我們想要找,有沒有 jack
時,我們是對 key
名字做搜尋,所以我們要使用的是 array_key_exists
:
array_key_exists('jack', $scores);
當我們想要找,有沒有人的分數是80分時,我們是對分數 value
做搜尋,所以是用 in_array
:
in_array(80, $scores);
有的 Array 看起來沒有 key
你說的應該是這種用法:
$fruits = ['apple', 'banana', 'orange'];
或
$fruits = array('apple', 'banana', 'orange');
但其實上面這兩句等同於:
$scores = [
0 => 'apple',
1 => 'banana',
2 => 'orange'
];
所以其實還是有 key
的,只是因為你沒有提供,所以 PHP 自動按順序編碼囉。而這種的我們通常會叫做 index
,在 PHP 中,key
跟 index
沒有差別,只是習慣的稱呼方式不同而已,交替使用應該沒有太大問題。
所以我們想要找尋 apple
是否存在,就要用 in_array
喲,因為按照結構來看,apple
是被放在 value
的位置的。
小結
搞懂 key
跟 value
的差別後,應該比較容易理解這兩個 function 的不同了,在補充另一個觀點,我們從英文語意來看:
in_array
:是否在 array 中,一般情況下,我們在乎的應該是實際的東西,所以「值」比較合理;
array_key_exists
:key
是否存在 array 中,看到這邊應該已經知道,function 名稱都已經直接講答案了~
更多PHP相關文章,請參考:PHP系列