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

时间:2013-11-03 00:01:37

标签: php arrays

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

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)
}

检查蓝色是否存在?

5 个答案:

答案 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";
 }
}

Reference

答案 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
*/