1

キーが配列に存在するかどうかを確認する方法はありますが、複数のキーである可能性がありますか?私が意味した:

$a['b'] = 'Im exists!';
var_dump (isset($a['b']));

しかし、私の場合は複雑です。

$a['c'] = 'c';
$a['xxc'] = 'value';
$a[2][4] = 'more complex!';
$a['b']['d']['g'] = 4;

この時点では、isset()は機能しませんが、array_key_existsは機能しません。次に、[2] [4]が存在するかどうか、または['b'] ['d'] ['g']が存在するかどうかを確認する方法は?

4

4 に答える 4

2

解決するのは興味深い問題でした。

function key_exists_recursive($keys, $array)
{
    if(!is_array($keys) or !is_array($array))
    {
        return false;
    }

    if(count($keys) > 1)
    {
        return key_exists_recursive(array_slice($keys, 1), $array[$keys[0]]);
    }

    return isset($array[$keys[0]]);
}

使用法:key_exists_recursive(array('c'), $a);

于 2012-08-19T15:11:18.267 に答える
2

これはあなたのために働くことができますか(多次元配列の再帰関数)?

function array_key_exists_r($needle, $haystack)
{
    $result = array_key_exists($needle, $haystack);
    if ($result) return $result;
    foreach ($haystack as $v) {
        if (is_array($v)) {
            $result = array_key_exists_r($needle, $v);
        }
        if ($result) return $result;
    }
    return $result;
}
于 2012-08-19T14:28:48.883 に答える
0

isset() は実際にはこれで機能するはずです。以下を実行してみてください。

$a = array();
$a['b']['d']['g'] = 4;

if (isset($a['b']['d']['g']))
{
  print_r('b,d,g exists!');
}

if (!isset($a['1']['2']['3']))
{
  print_r('1,2,3 does not exist!');
}

出力:

b,d,gが存在!1,2,3 は存在しません!

于 2013-05-09T02:14:58.763 に答える