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

私の見解:

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 に答える
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 は単語の境界を示しているため、"bluegreen" のような部分的な単語ではなく、明確な単語 "blue" のみが一致します。

search='blue';
foreach ($array as $key => $value) {
 if (preg_match('/\b'.$search.'\b/i',$key)) {
    echo "jo";
 }
}

参照

于 2013-11-03T00:12:59.540 に答える
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 に答える
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 に答える