对于具有单个值的数组,如
array(2) {
["blue"]=>
int(0)
["red"]=>
int(1)
}
我使用此代码
<?php
if (array_key_exists('blue',$array))
{
echo "jo";
}
?>
但是我需要为这样的数组使用什么代码
array(2) {
["yellow blue"]=>
int(0)
["red white"]=>
int(1)
}
检查蓝色是否存在?
答案 0 :(得分:2)
$partialKey = 'blue';
$byPartialKey = function ($key) use ($partialKey) {
$parts = explode(' ', $key);
return in_array($partialKey, $parts);
};
$result = array_filter (array_keys($input), $byPartialKey);
$result
现在包含所有键,它们以某种方式包含$partialKey
。
答案 1 :(得分:2)
你可以使用正则表达式
search='blue';
foreach ($array as $key => $value) {
if (preg_match('~'.$search.'~i',$key)) {
echo "jo";
}
}
模式中的\ b表示单词边界,因此只有不同的单词边界 单词“blue”匹配,而不是像“bluegreen”这样的单词部分
search='blue';
foreach ($array as $key => $value) {
if (preg_match('/\b'.$search.'\b/i',$key)) {
echo "jo";
}
}
答案 2 :(得分:2)
我的看法:
if(preg_grep('/blue/', array_keys($array))) { echo 'found'; }
或者如果你想得到它们:
$matches = preg_grep('/blue/', array_keys($array));
print_r($matches);
答案 3 :(得分:0)
我会这样做:
function subkey_exists($string, $array) {
foreach($array as $key => $value) {
$sub_keys = explode(" ", $key);
if(in_array($string,$sub_keys)) {
return true;
}
}
return false;
}
[编辑]
根据您的要求更新
答案 4 :(得分:0)
另一个array_filter
解决方案:
<?php
function find_keys_like($key, $array) {
return array_filter(array_keys($array), function($k) use (&$key) {
return strpos($k, $key) > -1;
});
}
function array_has_key_like($key, $array) {
return count(find_keys_like($key, $array)) > 0;
}
//test
$a = array('blue' => 1, 'yellow blue' => 2, 'green' => 3);
print_r(find_keys_like('blue', $a));
echo 'blue exists ? ' . (array_has_key_like('blue', $a) ? 'yes' : 'no') . PHP_EOL;
/** result :
Array
(
[0] => blue
[1] => yellow blue
)
blue exists ? yes
*/