1

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

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

检查蓝色是否存在?

4

5 回答 5

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.

于 2013-11-03T00:11:56.350 回答
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";
 }
}

参考

于 2013-11-03T00:12:59.540 回答
2

我的看法:

if(preg_grep('/blue/', array_keys($array))) { echo 'found'; }

或者,如果您想获得它们:

$matches = preg_grep('/blue/', array_keys($array));
print_r($matches);
于 2013-11-03T00:23:16.993 回答
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;
}

[编辑]

根据您的要求更新

于 2013-11-03T00:15:32.600 回答
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
*/
于 2013-11-03T00:28:54.293 回答