我有当前的数组:
$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”。
“我的大容器”应匹配“容器”并返回“案例”。
尝试使用
array_search("My Big Container", $types);
这不会返回任何内容并且为FALSE。我接受它是因为我的键不是数字而是字符串?
答案 0 :(得分: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];
答案 1 :(得分: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
值,则可能需要更改该返回值。