2016-11-10 88 views
0

我當前的陣列查找數組值:通過字符串鍵

$types = array(
    "Rifle" => "rifle", 
    "SMG" => "smg", 
    "Knife" => "knife", 
    "Sticker" => "sticker", 
    "Container" => "case", 
    "Key" => "key", 
    "Shotgun" => "heavy", 
    "Machinegun" => "heavy", 
    "Music Kit" => "music", 
    "Graffiti" => "graffiti", 
    "Tag" => "tag", 
); 

那麼我想,要檢查我的字符串包含的關鍵之一字,例如「祕密步槍」應該匹配數組中的第一個元素並返回「步槍」。

「我的大容器」應匹配「容器」並返回「案例」。

嘗試使用

array_search("My Big Container", $types); 

這不返回任何東西,是假。我拿它,因爲我的鑰匙不是數字,而是字符串?

回答

1

你可以這樣做:

function getArrayValueBasedOnString($array, $string, $caseSensitive = false){ 
    $s = $caseSensitive ? '' : 'i'; 
    foreach($array as $k => $v){ 
    if(preg_match('/'.preg_quote($k, '/')."/$s", $string)){ 
     return $v; 
    } 
    } 
    return null; 
} 
$result = getArrayValueBasedOnString($types, 'My Big Container'); 

當然,這將返回第一場比賽。如果您有任何null$array值,您可能需要更改該返回值。

+1

你應該考慮preg_quote轉義正則表達式的保留值。 – Simon

+0

當然,我同意,如果你有任何奇怪的數組鍵。 – PHPglue

1

array_search正在搜索值。 如果你要搜索的鑰匙,你應該使用array_keys

$key = array_search("Container", array_keys($types)); 
if(is_array($key) && count($key) > 0) 
    return $types[$key]; 

然而,array_search將執行精確匹配變換鍵的值。如果你想部分匹配(一個字)或不區分大小寫,否則,那麼你不應該使用array_search但在所有鍵循環,並試圖找到任何文字

$keys = array_keys($types); 
$words = explode(" ", "My Big Container"); 
$match = null; 
foreach($keys as $k) 
    foreach($words as $w) 
     if($k == $w) $match = $w; 

if($match !== null) 
    return $types[$match]; 
+0

這絕對是一個多字搜索(並可能區分大小寫)。我有什麼替代方法可以用於array_search? – user1372896

+0

我包括一個(簡單)多詞搜索的例子 – Simon