array_key_exists运行不正常

时间:2016-04-20 09:53:01

标签: php arrays array-key-exists

我有这个数组:

$variableNames = [
        'x1',
        'x2',
        'x3',
        'x4',
        'x5',
        'x6',
        'x7'
    ];

但是,当我使用这样的array_key_exists函数时:

array_key_exists('x3', $this->variableNames)

返回false。但是,如果我有这个数组:

$variableNames = [
        'x1' => null,
        'x2' => null,
        'x3' => null,
        'x4' => null,
        'x5' => null,
        'x6' => null,
        'x7' => null
    ];

返回true。我如何使用第一个数组,并获得true? 在第一个数组中,值也是null,就像第二个数组一样。那么,为什么第一个数组返回false而第二个数组返回true

4 个答案:

答案 0 :(得分:5)

array_key_exists()搜索键而不是值。

在第一种情况下,您x3有价值。

所以,它没有搜索。

在这种情况下,您可以使用in_array(),此功能搜索 对于价值观。

在第二种情况下,x3是关键,因此,正确搜索。

答案 1 :(得分:2)

键不是空的,永远不会。

$variableNames = [
        'x1',
        'x2',
        'x3',
        'x4',
        'x5',
        'x6',
        'x7'
    ];

表示

$variableNames = [
        0 => 'x1',
        1 => 'x2',
        2 => 'x3',
        3 => 'x4',
        4 => 'x5',
        5 => 'x6',
        6 => 'x7'
    ];

使用

in_array('x3', $this->variableNames)

代替。

答案 2 :(得分:0)

使用in_array()代替array_key_exists()

在你的情况下,

$variableNames = ['x1',
        'x2',
        'x3',
        'x4',
        'x5',
        'x6',
        'x7'];

if (in_array("x3", $this->variableNames)) {
    echo "Found x3";
}

答案 3 :(得分:0)

没有你的错误。该功能运行良好,您只是错误地使用它。 array_key_exists寻找关键,而非价值。

您提供的第一个数组实际上被视为值数组。它们有索引键,由PHP自动添加。我print_r($variableNames),您会看到它会返回以下内容。

$variableNames = [
        0 => 'x1',
        1 => 'x2',
        2 => 'x3',
        3 => 'x4',
        4 => 'x5',
        5 => 'x6',
        6 => 'x7'
    ];

您需要搜索该值。使用in_array()isset(),两种方式都是正确的,一种方式比另一种更方便。