Я пытаюсь создать функцию, которая позволяет искать многомерные массивы, где каждый подмассив соответствует нескольким условиям. Я сталкиваюсь со странным поведением и не могу понять, почему это происходит.
Ниже приводится общая логика c, которая вызывает проблему. Я запускаю это на PHP 7.4 для чего это стоит. Ожидается, что последний массив ключей ($keys2
) будет соответствовать первому массиву ключей ($keys
), но вместо этого он теряет связь с ожидаемыми индексами. Похоже, что PHP игнорирует мои данные индексы int и вместо этого использует невидимые 0-индексированные индексы в последнем вызове array_keys()
.
$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 '';
var_dump($array, $keys, $array2, $keys2);
echo '
';
Вышеуказанные выходы:
/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