猿问

多维数组的多值搜索未在 PHP 中返回预期结果

我正在尝试构建一个允许搜索多维数组的函数,其中每个子数组都匹配多个条件。我遇到了一种奇怪的行为,无法弄清楚为什么会这样。


以下是导致问题的一般逻辑。我在 PHP 7.4 上运行它是为了它的价值。最终的键数组 ( $keys2) 应该与第一个键数组( ) 匹配$keys,但它失去了与预期索引的关联。看来 PHP 忽略了我给定的 int 索引,array_keys()而是在最终调用中使用了未见过的 0 索引索引。


$array = [

    ['one' => 'aa', 'two' => 'qq'],

    ['one' => 'bb', 'two' => 'qq'],

    ['one' => 'aa', 'two' => 'qq'],

    ['one' => 'bb', 'two' => 'qq'],

    ['one' => 'aa', 'two' => 'qq'],

];


$keys = array_keys(array_column($array, 'one'), 'aa');

$array2 = array_filter($array, static function($key) use ($keys) {

    return in_array($key, $keys, true);

}, ARRAY_FILTER_USE_KEY);

$keys2 = array_keys(array_column($array2, 'two'), 'qq');


echo '<pre>';

var_dump($array, $keys, $array2, $keys2);

echo '</pre>';

以上输出:


/var/www/test.php:

array (size=5)

  0 => 

    array (size=2)

      'one' => string 'aa' (length=2)

      'two' => string 'qq' (length=2)

  1 => 

    array (size=2)

      'one' => string 'bb' (length=2)

      'two' => string 'qq' (length=2)

  2 => 

    array (size=2)

      'one' => string 'aa' (length=2)

      'two' => string 'qq' (length=2)

  3 => 

    array (size=2)

      'one' => string 'bb' (length=2)

      'two' => string 'qq' (length=2)

  4 => 

    array (size=2)

      'one' => string 'aa' (length=2)

      'two' => string 'qq' (length=2)

/var/www/test.php:

array (size=3)

  0 => int 0

  1 => int 2

  2 => int 4

/var/www/test.php:27:

array (size=3)

  0 => 

    array (size=2)

      'one' => string 'aa' (length=2)

      'two' => string 'qq' (length=2)

  2 => 

    array (size=2)

      'one' => string 'aa' (length=2)

      'two' => string 'qq' (length=2)

  4 => 

    array (size=2)

      'one' => string 'aa' (length=2)

      'two' => string 'qq' (length=2)

/var/www/test.php:

array (size=3)

  0 => int 0

  1 => int 1

  2 => int 2


慕标琳琳
浏览 124回答 1
1回答

慕标5832272

<?php&nbsp;$array = [&nbsp; &nbsp; ['one' => 'aa', 'two' => 'qq'],&nbsp; &nbsp; ['one' => 'bb', 'two' => 'qq'],&nbsp; &nbsp; ['one' => 'aa', 'two' => 'qq'],&nbsp; &nbsp; ['one' => 'bb', 'two' => 'qq'],&nbsp; &nbsp; ['one' => 'aa', 'two' => 'qq'],];$keys = array_keys(array_column($array, 'one'), 'aa');$array2 = array_filter($array, static function($key) use ($keys) {&nbsp; &nbsp; return in_array($key, $keys, true);}, ARRAY_FILTER_USE_KEY);$keys2 = array_keys(array_combine(array_keys($array2), array_column($array2, 'two')), 'qq', true);echo '<pre>';var_dump($array, $keys, $array2, $keys2);echo '</pre>';
随时随地看视频慕课网APP
我要回答