一、基本介紹
PHP的array_search()函數是用來在數組中搜索指定的值,並返回其鍵名的函數。如果找到指定的值,則返回該值對應的鍵名,如果沒有找到,則返回false。
array_search()函數的語法為:
mixed array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
其中,$needle為要搜索的值,$haystack為要搜索的數組,$strict為可選參數。如果該參數的值為true,則搜索時區分大小寫和數據類型。
二、返回值
如果搜索成功,則返回鍵值,如果搜索失敗,則返回false。需要注意的是,返回的鍵值是該值第一次出現在數組中的鍵名,而不是最後一次出現的鍵名。
下面的代碼演示了array_search()函數的基本使用方法:
$arr = array('1'=>'apple', '2'=>'banana', '3'=>'cherry'); $index = array_search('banana', $arr); echo 'the index of \'banana\' is: '.$index; // 輸出 2
三、值類型的判斷
如果在搜索的數組中,值的類型不同,則需要使用第三個參數$strict,來確定搜索時是否區分類型。
下面的代碼中,$arr數組中包含一個整數2和一個字元串’2’,如果不使用$strict,則無法區分它們:
$arr = array(1, 2, '2', '3'); $index = array_search('2', $arr); echo 'the index of \'2\' is: '.$index; // 輸出 1 $index = array_search(2, $arr); echo 'the index of 2 is: '.$index; // 輸出 1 $index = array_search('2', $arr, true); echo 'the index of \'2\' is: '.$index; // 輸出 false
四、默認鍵名數組的搜索
如果要搜索的數組沒有指定鍵名,則默認的鍵名是從0開始的數字索引。因此,如果搜索的值為0,則需要特別注意:
$arr = array(0, '1', '2'); $index = array_search(0, $arr); echo 'the index of 0 is: '.$index; // 輸出 0
由於0為數組的默認鍵名,因此上面的代碼輸出的是0。
五、值為null或空字元串的搜索
如果要搜索的值為null或空字元串,則需要使用全等號(===)進行嚴格比較。因為array_search()函數使用的是弱類型比較(==),所以在搜索這些值時可能會出現一些問題。
$arr = array(null, '', 'foo', 'bar'); $index = array_search('', $arr); echo 'the index of \'\' is: '.$index; // 輸出 0 $index = array_search(null, $arr); echo 'the index of null is: '.$index; // 輸出 false $index = array_search(null, $arr, true); echo 'the index of null is: '.$index; // 輸出 0
在上面的代碼中,由於null和空字元串是不同類型的值,因此在搜索時需要使用嚴格比較。
六、多個結果的搜索
如果要搜索多個具有相同值的元素,則只返回最先找到的那個元素的鍵名。
$arr = array('apple', 'banana', 'cherry', 'banana'); $index = array_search('banana', $arr); echo 'the index of \'banana\' is: '.$index; // 輸出 1
七、搜索區間的限制
如果只需要在數組的一部分中搜索,可以使用array_slice()函數,將需要搜索的部分切割成一個新的數組,再對該數組進行搜索。
$arr = array('apple', 'banana', 'cherry', 'orange'); $index = array_search('banana', array_slice($arr, 1, 2)); echo 'the index of \'banana\' is: '.$index; // 輸出 false
在上面的代碼中,將$arr數組從第二個元素開始切割,取兩個元素進行搜索。由於這個部分沒有banana元素,因此搜索失敗。
八、使用回調函數進行搜索
如果需要自定義搜索的規則,則可以通過在array_search()函數中使用回調函數來實現。
function my_search($n) { return $n > 2; } $arr = array(1, 2, 3, 4, 5); $index = array_search(true, array_map('my_search', $arr)); echo 'the index of first number greater than 2 is: '.$index; // 輸出 2
在上面的代碼中,使用array_map()函數對數組中的每個元素應用my_search()函數,將結果轉換為一個新的數組。然後在該數組中搜索true值,找到第一個大於2的元素的鍵名。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/229137.html