2021年11月30日

搞混了嗎?帶你一次弄懂 PHP in_array 和 array_key_exists 的差別

本篇為PHP系列

in_arrayarray_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
];

因此,上面範例中,jacktomannie等名字,就是 key ,他們個別的分數 759580就是 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 中,keyindex 沒有差別,只是習慣的稱呼方式不同而已,交替使用應該沒有太大問題。

 

所以我們想要找尋 apple 是否存在,就要用 in_array 喲,因為按照結構來看,apple 是被放在 value 的位置的。

 

小結

搞懂 keyvalue 的差別後,應該比較容易理解這兩個 function 的不同了,在補充另一個觀點,我們從英文語意來看:

in_array:是否在 array 中,一般情況下,我們在乎的應該是實際的東西,所以「值」比較合理;

array_key_existskey 是否存在 array 中,看到這邊應該已經知道,function 名稱都已經直接講答案了~


更多PHP相關文章,請參考:PHP系列

延伸

PHP Array 初學者可以參考這篇《Array 教學,基本概念與操作》和這篇《Array 教學,10 個必學的 PHP Array 實用作法與方法》