我正在尝试构建一个允许搜索多维数组的函数,其中每个子数组都匹配多个条件。我遇到了一种奇怪的行为,无法弄清楚为什么会这样。
以下是导致问题的一般逻辑。我在 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
慕标5832272