Php 检查数组中是否存在多个值之一

Php 检查数组中是否存在多个值之一,php,arrays,Php,Arrays,对于具有单个值的数组,如 array(2) { ["blue"]=> int(0) ["red"]=> int(1) } 我使用这个代码 <?php if (array_key_exists('blue',$array)) { echo "jo"; } ?> 检查是否存在蓝色 $partialKey = 'blue'; $byPartialKey = function ($key) use ($partialKey) { $parts

对于具有单个值的数组,如

array(2) {
  ["blue"]=>
  int(0)
  ["red"]=>
  int(1)
}
我使用这个代码

<?php
if (array_key_exists('blue',$array))
{
    echo "jo";
}
?>
检查是否存在蓝色

$partialKey = 'blue';
$byPartialKey = function ($key) use ($partialKey) {
    $parts = explode(' ', $key);
    return in_array($partialKey, $parts);
};

$result = array_filter (array_keys($input), $byPartialKey);
$result
现在包含所有键,它们以某种方式包含
$partialKey


$result
现在包含所有键,它们以某种方式包含您可以使用正则表达式执行的
$partialKey

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('~'.$search.'~i',$key)) {
    echo "jo";
 }
}
模式中的\b表示单词边界,因此只有 单词“blue”是匹配的,而不是像“bluegreen”这样的单词


我会这样做:

function subkey_exists($string, $array) {
    foreach($array as $key => $value) {
        $sub_keys = explode(" ", $key);
        if(in_array($string,$sub_keys)) {
            return true;
        }
    }
    return false;
}
[编辑]


更新到您的要求

我会这样做:

function subkey_exists($string, $array) {
    foreach($array as $key => $value) {
        $sub_keys = explode(" ", $key);
        if(in_array($string,$sub_keys)) {
            return true;
        }
    }
    return false;
}
[编辑]

根据您的要求进行更新

我的拍摄:

if(preg_grep('/blue/', array_keys($array))) { echo 'found'; }
或者,如果你想得到它们:

$matches = preg_grep('/blue/', array_keys($array));
print_r($matches);
我的看法:

if(preg_grep('/blue/', array_keys($array))) { echo 'found'; }
或者,如果你想得到它们:

$matches = preg_grep('/blue/', array_keys($array));
print_r($matches);

另一种
阵列过滤器
解决方案:

<?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
*/

另一种
阵列过滤器
解决方案:

<?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
*/


是否要检查文本blu是否存在于键中?是的,检查“黄蓝”是否有效,但不检查是否仅蓝色。是否要检查文本blu是否存在于键中?是的,检查“黄蓝”是否有效,但不检查仅蓝色也应这样做,但这也会命中例如
黄蓝绿
。我不知道,现在这是否是一个问题,但不断变化的需求可能会使这成为一个问题,所以我不会依赖它。你必须定义你想要的正则表达式,只有单词blue,o在字符串中包含blue我尝试了$search='blue';foreach($key=>myarray$value){if(preg_匹配('/\b'.$search'.\b/i',$key){echo“jo”;}}但是页面没有加载它在
IF
,answer updated中缺少了一个右括号现在它也可以工作了,并且非常适合精确匹配。但是现在我不需要精确匹配,所以我也接受了Abracadver的解决方案思想,但这也会影响到例如
黄蓝绿
。不知道,这是否是一个问题,但是chang你必须定义你想要的正则表达式,只有单词blue,o在字符串中包含blue我尝试了$search='blue';foreach($key=>myarray$value){if(preg_match('/\b'.$search.'\b/I',$key){echo“jo”;}但是页面没有加载它在
IF
,answer updated中缺少了一个右括号现在它也可以工作了,并且非常适合精确匹配。但是现在我不需要精确匹配,所以我接受了Abracadver的解决方案谢谢,但是如果找到蓝色,我如何回显?如果$result如果为空,那么回显“存在”或者“不存在”是吗?@MatthiasMüller With
echo
。实际上我不知道,现在怎么了。--
echo$result?找到一个或多个“blue”:没有找到“blue”;
谢谢,但是如果找到blue,我怎么回显呢?如果$result为空,那么echo“在那里”或者“不在那里”是吗?@MatthiasMüller With
echo
。实际上我不知道,现在怎么了。--
echo$result?“找到一个或多个“蓝色”:“没有蓝色”找到“;
在Emilios查看我的命令答案:这也包括
yell bluegreen
在Emilios查看我的命令答案:这也包括
yell bluegreen
我看到了其他评论,如果你不想要
greenblue
等,你必须调整模式。你必须明确你想要什么。你的第二个代码有效,但第一个代码有效一个看起来更好,但页面没有加载,代码中是否有错误?是的,已编辑。但这些示例不是复制粘贴。您的编辑器是否没有一些语法突出显示?否,您建议使用哪种编辑器?您的代码工作得很好:DDepends。如果您对项目编码很认真,请查看IDE(eclipse、netbeans、aptana和其他几十个).Notepad++是一个很好的windows文本编辑器,具有语法突出显示功能。对于Mac,我不确定,但我使用Linux,而且大多数(如果不是所有)编辑器都有一些流行语言编程模式。我看到了其他评论,如果你不想
greenblue
等,你必须调整模式。你必须具体说明你想要什么。你的第二个问题是代码可以工作,但第一个看起来更好,但页面没有加载,代码中是否有错误?是的,已编辑。但这些示例不是复制粘贴。您的编辑器是否没有一些语法突出显示?否,您建议使用哪种编辑器?您的代码工作得很好:DDepends。如果您对项目编码很认真,请检查一个IDE(eclipse、netbeans、aptana、许多其他产品)。Notepad++是一个很好的windows文本编辑器,具有语法突出显示功能。我不确定Mac,但我使用Linux和大多数(如果不是所有的话)编辑器都有一些流行语言编程模式。