Для того что бы определить ключ массива зная его значения, можно использовать как минимум три варианта решения.
- Мы можем использовать известную уже нам ф-ю array_search. Ранее в статье про удалении элемента из массива ее мы уже использовали.
- В цикле, пройтись по всем элементам массива и сравнив значения, определить ключ.
- Использовать ф-ю «array_walk», имитируя вариант из пункта 2.
Исходные данные:
<?php $array = [
10 => 'Lorem',
12 => 'Ipsum',
15 => 'simply',
20 => 'dummy',
33 => 'text',
];
Выше массив значений, где ключи и значения уникальны. Подчеркиваю, что значения уникальны. Если в ваших примерах будут встречаться одинаковые значения, то будут возвращены ключи, первых значений одинаковых элементов.
Пример 1
В нем мы используем PHP ф-ю array_search, и ищем ключ, значение у которого «simply»:
<?php //Example 1 $search_value = 'simply'; echo var_dump(array_search($search_value, $array)); echo "n";
Результатом будет - int(15)
Пример 2
Используем цикл «foreach» для обхода всех элементов массива, и условный оператор «if» для сравнения значений.
<?php //Example 2
$search_value = 'Ipsum';
foreach( $array as $key => $value )
{
if($search_value == $value)
{
var_dump($key);
echo "\n";
break;
}
}Для значения «Ipsum», ответом будет ключ «int(12)»
Пример 3
Пожалуй самый длинный и самый странный из вариантов, это использование функции «array_walk» и передачи по ссылке найденного ключа «$search_key» через use:
<?php
//Example 3
$search_value = 'Lorem';
$search_key = NULL;
array_walk($array, function($value, $key, $search_value) use(&$search_key){
if($search_value == $value)
{
$search_key = $key;
}
}, $search_value);
var_dump($search_key);
Результатом будет или NULL в случае если ключ не был найден, или «int(10)» в случае найденного значения «Lorem».
Какой итог этого всего. Не морочьте себе голову, а используйте то что уже есть в PHP встроенное, а это готовую ф-ю «array_search».
Раньше, на заре своей карьеры PHP программиста, я часто писал подобные велосипеды как из примеров 2 и 3. Со временем, я поумнел, и начал заглядывать в документацию PHP и искать может уже есть что-то готовое. А сейчас, при существования гитхаба и ему подобных, скорость разработки можно увеличить еще на порядок больше. Удачи!
