2

我有这个数组:

$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?在第一个数组中,值也为空,就像第二个数组一样。那么,为什么第一个数组返回false,第二个数组返回true呢?

4

4 回答 4

7

array_key_exists()搜索键而不是值。

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

所以,它没有搜索。

在这种情况下,您可以使用in_array(),该函数搜索值。

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

于 2016-04-20T09:55:18.763 回答
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)

反而。

于 2016-04-20T09:55:22.883 回答
0

使用in_array()代替array_key_exists()

在你的情况下,

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

if (in_array("x3", $this->variableNames)) {
    echo "Found x3";
}
于 2016-04-20T10:03:24.990 回答
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()or isset(),两种方式都对,一种比另一种更方便。

于 2016-04-20T10:11:59.780 回答