array_key_exists 运行不正常

array_key_exists is not working well

我有这个数组:

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

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

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

它return false。但是,如果我有这个数组:

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

它return true。我怎样才能使用第一个数组,并得到 true? 在第一个数组中,值也为 null,就像第二个数组一样。那么,为什么第一个数组returnfalse和第二个数组returntrue

array_key_exists() 搜索键而不是值。

在你的第一种情况下,你 x3 是有价值的。

所以,它没有搜索。

这种情况下可以使用in_array(),这个函数搜索 对于值。

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

键不为空,永远不会。

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

相反。

使用in_array()代替array_key_exists()

在你的情况下,

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

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

不,你错了。该功能运行良好,您只是使用不当。 array_key_exists 查找键,而不是值。

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

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

您需要改为搜索该值。使用in_array()isset(),两种方式都对,只是一种比另一种更方便。