我有当前数组:
$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",
);
然后我想检查我的字符串是否包含其中一个键的单词,例如"Covert Rifle"应该匹配数组中的第一个元素并返回"Rifle"。
"My Big Container"应该匹配"Container"并返回"case"。
试图使用
array_search("My Big Container", $types);
不返回任何东西,为FALSE。因为我的键不是数字而是字符串?
你可以这样做:
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
值,您可能需要更改返回值
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];