當前位置:才華齋>計算機>php語言>

PHP函式中isset和array-key-exists的差異

php語言 閱讀(4.04K)

本文將為大家講解PHP函式中isset和array_key_exists的差異,歡迎學習!

PHP函式中isset和array-key-exists的差異

在判斷某個 PHP 陣列的索引值是否存在,一般會使用 isset 和 array_key_exists 兩種方法。

isset($a['key'])

array_key_exists('key', $a)

array_key_exists 確切地告訴你,陣列是否存在某個鍵,而 isset 則只是返回鍵值是否為 null 的狀態。也就是說,假設給定下面的陣列:

$a = array('key1' => '123', 'key2' => null);

使用這兩個方法判斷鍵值存在情況,結果如下:

isset($a['key1']); // true

array_key_exists('key1', $a); // true

isset($a['key2']); // false

array_key_exists('key2', $a); // true

從 PHP 引擎本身來說,底層都是 C 語言的實現,array_key_exists 和 isset 應該都是很快的。如果運算次數上千次上萬次,這種情況下 isset 的效能應該更為顯著。

  【相關閱讀】PHP函式similar_text()原理分析

PHP有個計算兩個字串相似度的函式similar_text(),可以得出一個百分比來表示兩個字串的相似程度。效果如下:

similar_text('aaaa', 'aaaa', $percent);

var_dump($percent);

//float(100)

similar_text('aaaa', 'aaaabbbb', $percent);

var_dump($percent);

//float(66.666666666667)

similar_text('abcdef', 'aabcdefg', $percent);

var_dump($percent);

//float(85.714285714286)

利用這個函式,可以用來做模糊搜尋的功能,或者其他需要模糊匹配的功能。最近我在驗證碼識別研究中的特徵匹配一步上涉及到了這個函式。

但這個函式具體使用了怎樣的演算法呢?我研究了他的底層實現,總結為三步:

(1)找出兩個字串中相同部分最長的一段;

(2)再用同樣的'方法在剩下的兩段中分別找出相同部分最長的一段,以此類推,直到沒有任何相同部分;

(3)相似度 = 所有相同部分的長度之和 * 2 / 兩個字串的長度之和;

我研究的源程式碼版本是PHP 5.4.6,相關的程式碼位於檔案php-5.4.6/ext/standard/string.c的第2951~3031行。以下是我加過註釋後原始碼。

//找出兩個字串中相同部分最長的一段