Найти в Дзене

Поиск ключа по значению в массиве PHP

Для поиска ключа в массиве по его значению в PHP есть несколько способов. Рассмотрим пример с массивом a[1 => ['name_value']]. $array = [1 => ['name_value'], 2 => ['other_value']]; // Ищем ключ, где первый элемент подмассива равен 'name_value' $key = array_search('name_value', array_column($array, 0)); if ($key !== false) { echo "Найден ключ: " . ($key + 1); // Выведет: Найден ключ: 1 } else { echo "Значение не найдено"; } $array = [ 1 => ['name' => 'name_value'], 2 => ['name' => 'other_value'] ]; foreach ($array as $key => $subArray) { if (in_array('name_value', $subArray)) { echo "Найден ключ: $key"; // Выведет: Найден ключ: 1 break; } } $array = [ 1 => ['name' => 'name_value'], 2 => ['name' => 'other_value'] ]; $filtered = array_filter($array, function($item) { return in_array('name_value', $item); }); if (!empty($filtered)) { $key = key($filtered); // Получаем первый найденный ключ echo "Найден ключ: $key"; } $array = [ 1 => ['name' => 'name_value', 'id' => 101], 2 => ['name' => '
Оглавление

Для поиска ключа в массиве по его значению в PHP есть несколько способов. Рассмотрим пример с массивом a[1 => ['name_value']].

1. Использование array_search() для простых массивов

$array = [1 => ['name_value'], 2 => ['other_value']];
// Ищем ключ, где первый элемент подмассива равен 'name_value'
$key = array_search('name_value', array_column($array, 0));
if ($key !== false) {
echo "Найден ключ: " . ($key + 1); // Выведет: Найден ключ: 1
} else {
echo "Значение не найдено";
}

2. Перебор массива с проверкой (для сложных условий)

$array = [
1 => ['name' => 'name_value'],
2 => ['name' => 'other_value']
];
foreach ($array as $key => $subArray) {
if (in_array('name_value', $subArray)) {
echo "Найден ключ: $key"; // Выведет: Найден ключ: 1
break;
}
}

3. Использование array_filter()

$array = [
1 => ['name' => 'name_value'],
2 => ['name' => 'other_value']
];
$filtered = array_filter($array, function($item) {
return in_array('name_value', $item);
});
if (!empty($filtered)) {
$key = key($filtered); // Получаем первый найденный ключ
echo "Найден ключ: $key";
}

4. Для ассоциативных подмассивов

$array = [
1 => ['name' => 'name_value', 'id' => 101],
2 => ['name' => 'other_value', 'id' => 102]
];
$searchValue = 'name_value';
$key = null;
foreach ($array as $k => $v) {
if (isset($v['name']) && $v['name'] === $searchValue) {
$key = $k;
break;
}
}
if ($key !== null) {
echo "Найден ключ: $key"; // Выведет: Найден ключ: 1
}

5. Создание универсальной функции

function findKeyByValue($array, $value, $subKey = null) {
foreach ($array as $key => $item) {
if ($subKey !== null) {
if (isset($item[$subKey]) && $item[$subKey] === $value) {
return $key;
}
} else {
if (in_array($value, (array)$item)) {
return $key;
}
}
}
return null;
}
// Использование
$key = findKeyByValue($array, 'name_value');

Выберите подходящий способ в зависимости от структуры вашего массива и требуемой точности поиска. Первый вариант наиболее оптимален для простых случаев, а последний - для сложных структур данных.