W3docs

Полное руководство по функции array_keys в PHP

Функция array_keys в PHP возвращает ключи массива в виде нового массива. Изучите синтаксис, режим поиска по значению и практические примеры применения.

array_keys() возвращает ключи (индексы) массива в виде нового, числово переиндексированного array. Это один из наиболее распространённых способов изучить структуру массива: к нему обращаются тогда, когда важно знать, какие слоты есть в массиве, а не значения, хранящиеся в них.

В этой главе объясняются синтаксис, необязательный режим поиска по значению, разница между нестрогим и строгим сравнением, а также типовые сценарии, в которых array_keys() является правильным инструментом.

Что делает array_keys()

Каждый PHP-массив — это упорядоченная карта пар ключ → значение. Ключ может быть целым числом (как в обычном индексированном array) или string (как в ассоциативном массиве). array_keys() отбрасывает значения и возвращает только ключи в их исходном порядке, перенумеровывая с 0:

  • Передайте один array — получите все ключи.
  • Передайте искомое значение — получите только ключи элементов, значение которых совпадает с этим значением.

Результат всегда представляет собой новый array, поэтому исходный массив не изменяется. Если вам нужны значения, используйте array_values(); если требуется лишь проверить наличие одного конкретного ключа, более эффективным выбором будет array_key_exists().

Синтаксис

array_keys(array $array, mixed $search_value = ?, bool $strict = false): array
ПараметрОбязательныйОписание
$arrayДаМассив, из которого считываются ключи.
$search_valueНетЕсли указан, возвращаются только ключи, значение которых равно данному.
$strictНетПри значении true для поиска используется строгое сравнение (===), то есть типы тоже должны совпадать. По умолчанию false.

Функция всегда возвращает array; если совпадений нет, возвращается пустой array, а не false.

Получение всех ключей массива

Наиболее распространённый вариант использования — извлечение всех ключей из ассоциативного массива:

php— editable, runs on the server

Вывод:

Array
(
    [0] => a
    [1] => b
    [2] => c
)

Возвращённый array $keys содержит три строковых ключа "a", "b" и "c", переиндексированных начиная с 0. Значения (apple, banana, cherry) отброшены — остались только ключи.

Поиск ключей по значению

Если передать второй аргумент, array_keys() работает как поиск: она возвращает ключ каждого элемента, равного этому значению. Именно этим она отличается от array_search(), которая останавливается на первом совпадении.

php— editable, runs on the server

Вывод:

Array
(
    [0] => 0
    [1] => 3
)

"apple" встречается на позициях 0 и 3, поэтому возвращаются оба ключа. Если значение не найдено, возвращается пустой array.

Нестрогое и строгое сравнение

По умолчанию поиск по значению использует нестрогое сравнение (==), поэтому 1, "1" и 1.0 считаются равными. Передайте true в качестве третьего аргумента, чтобы потребовать точного совпадения по типу и значению (===):

<?php

$values = array("1", 1, "one", 1, "1");

// Loose: matches both strings and integers
print_r(array_keys($values, 1));

// Strict: matches only the integer 1
print_r(array_keys($values, 1, true));

?>

Вывод:

Array
(
    [0] => 0
    [1] => 1
    [2] => 3
    [3] => 4
)
Array
(
    [0] => 1
    [1] => 3
)

Нестрогий поиск совпадает с "1", 1, 1 и "1" (ключи 0, 1, 3, 4), тогда как строгий поиск совпадает только с двумя целочисленными 1 (ключи 1 и 3). Используйте $strict = true, когда ваш array смешивает string и числовые значения и различие между ними имеет значение.

Ключи многомерного массива

array_keys() просматривает только верхний уровень — она возвращает ключи внешнего array и никогда не спускается во вложенные массивы. Для многомерного массива вы получите ключи внешнего уровня:

<?php

$matrix = array(
    "row1" => array("a" => 1, "b" => 2),
    "row2" => array("c" => 3),
);
print_r(array_keys($matrix));

?>

Вывод:

Array
(
    [0] => row1
    [1] => row2
)

Чтобы собрать и внутренние ключи, пройдитесь по результату в цикле и вызовите array_keys() для каждого вложенного array.

Перебор ключей в цикле

Частый паттерн — итерация структуры по ключам. Поскольку array_keys() даёт чистый список, можно напрямую управлять циклом foreach:

<?php

$prices = array("pen" => 1.20, "book" => 5.00, "bag" => 12.50);

foreach (array_keys($prices) as $item) {
    echo $item . PHP_EOL;
}

?>

Вывод:

pen
book
bag

В повседневном коде чаще используют foreach ($prices as $item => $price) — но array_keys() удобна, когда список ключей нужен как значение (чтобы передать его куда-то, подсчитать или сравнить ключи двух массивов).

Типичные сценарии использования и подводные камни

  • Подсчёт ключей: count(array_keys($arr)) то же самое, что count($arr) — предпочтительнее использовать count($arr) напрямую.
  • Проверка существования ключа: не используйте in_array($k, array_keys($arr)) — применяйте array_key_exists() или isset(), которые быстрее и понятнее. (Для проверки значения используйте in_array().)
  • Результат всегда переиндексируется: собственные ключи возвращаемого array всегда 0, 1, 2, … вне зависимости от исходных ключей.
  • При отсутствии совпадений возвращается []: форма поиска по значению никогда не возвращает false, поэтому проверяйте результат через empty() или count(), а не через === false.

Заключение

array_keys() извлекает ключи массива, опционально отфильтрованные по значению с нестрогим или строгим сравнением. Используйте её для получения списка ключей, поиска всех позиций значения или передачи списка ключей в цикл. Для получения соответствующих значений используйте array_values(), для проверки одного ключа — array_key_exists(), а для поиска первого совпадения значения — array_search().

Практика

Практика
Какова роль функции array_keys() в PHP?
Какова роль функции array_keys() в PHP?
Was this page helpful?