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

慕标5832272
TA贡献1966条经验 获得超4个赞
<?php
$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_combine(array_keys($array2), array_column($array2, 'two')), 'qq', true);
echo '<pre>';
var_dump($array, $keys, $array2, $keys2);
echo '</pre>';
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消