PHP array_key_exists key LIKE 字符串,可以吗?
PHP array_key_exists key LIKE string, is it possible?
我搜索了很多,还是想不出来这个。
我有一个这样的数组:
$array = array(cat => 0, dog => 1);
我有这样的字符串:
I like cats.
我想查看字符串是否与数组中的任何键匹配。我尝试了以下但显然它不起作用。
array_key_exists("I like cats", $array)
假设我可以在给定时间获得任意随机字符串,我该怎么做呢?
伪代码:
array_key_exists("I like cats", *.$array.*)
//The value for cat is "0"
请注意,我想检查是否存在任何形式的 "cat"。它可以是猫、凯茜,甚至是像 vbncatnm 这样的随机字母。我从 mysql 数据库获取数组,我需要知道猫或狗的 ID。
您可以使用 preg_match,其值不在数组中但在搜索条件
中
if(preg_match('~(cat|dog)~', "I like cats")) {
echo 'ok';
}
或
$criteria = '~(cat|dog)~';
if (preg_match($criteria, "I like cats")) {
echo 'ok';
}
否则你可以在数组上使用 foreach
foreach($array as $key => $value ) {
$pos = strpos("I like cats", $key);
if ($pos > 0) {
echo $key . ' '. $value;
}
}
您可以在键上使用正则表达式。因此,如果字符串中的任何单词等于键,$found
就是 true
。如果需要,您可以将 $key
保存在变量中。 preg_match 函数允许测试正则表达式。
$keys = array_keys($array);
$found = false;
foreach ($keys as $key) {
//If the key is found in your string, set $found to true
if (preg_match("/".$key."/", "I like cats")) {
$found = true;
}
}
编辑:
正如评论中所说,strpos 可能会更好!所以使用相同的代码,你可以只替换 preg_match:
$keys = array_keys($array);
$found = false;
foreach ($keys as $key) {
//If the key is found in your string, set $found to true
if (false !== strpos("I like cats", $key)) {
$found = true;
}
}
这应该可以帮助您实现您的目标:
$array = array('cat' => 10, 'dog' => 1);
$findThis = 'I like cats';
$filteredArray = array_filter($array, function($key) use($string){
return strpos($string, $key) !== false;
}, ARRAY_FILTER_USE_KEY);
我发现将 array_filter 函数与 closure/anonymous 函数结合使用是一种比 foreach 循环更优雅的方法,因为它保持一级缩进。
我搜索了很多,还是想不出来这个。
我有一个这样的数组:
$array = array(cat => 0, dog => 1);
我有这样的字符串:
I like cats.
我想查看字符串是否与数组中的任何键匹配。我尝试了以下但显然它不起作用。
array_key_exists("I like cats", $array)
假设我可以在给定时间获得任意随机字符串,我该怎么做呢?
伪代码:
array_key_exists("I like cats", *.$array.*)
//The value for cat is "0"
请注意,我想检查是否存在任何形式的 "cat"。它可以是猫、凯茜,甚至是像 vbncatnm 这样的随机字母。我从 mysql 数据库获取数组,我需要知道猫或狗的 ID。
您可以使用 preg_match,其值不在数组中但在搜索条件
中 if(preg_match('~(cat|dog)~', "I like cats")) {
echo 'ok';
}
或
$criteria = '~(cat|dog)~';
if (preg_match($criteria, "I like cats")) {
echo 'ok';
}
否则你可以在数组上使用 foreach
foreach($array as $key => $value ) {
$pos = strpos("I like cats", $key);
if ($pos > 0) {
echo $key . ' '. $value;
}
}
您可以在键上使用正则表达式。因此,如果字符串中的任何单词等于键,$found
就是 true
。如果需要,您可以将 $key
保存在变量中。 preg_match 函数允许测试正则表达式。
$keys = array_keys($array);
$found = false;
foreach ($keys as $key) {
//If the key is found in your string, set $found to true
if (preg_match("/".$key."/", "I like cats")) {
$found = true;
}
}
编辑:
正如评论中所说,strpos 可能会更好!所以使用相同的代码,你可以只替换 preg_match:
$keys = array_keys($array);
$found = false;
foreach ($keys as $key) {
//If the key is found in your string, set $found to true
if (false !== strpos("I like cats", $key)) {
$found = true;
}
}
这应该可以帮助您实现您的目标:
$array = array('cat' => 10, 'dog' => 1);
$findThis = 'I like cats';
$filteredArray = array_filter($array, function($key) use($string){
return strpos($string, $key) !== false;
}, ARRAY_FILTER_USE_KEY);
我发现将 array_filter 函数与 closure/anonymous 函数结合使用是一种比 foreach 循环更优雅的方法,因为它保持一级缩进。