Получить индекс массива на основе ключей

У меня есть массив с индексом. Индекс не является статичным и постоянно меняется.

$fields = [
11 => array (
'fieldId' => 'ORStreet',
'type' => 'TEXT',
'value' => 'Postbus 52',
),
];

Индекс вышеупомянутого равен 11. Но иногда это становится другим числом.
Одна вещь, которая всегда остается неизменной, это fieldId. Как я могу получить индекс этого массива, зная только идентификатор поля.

Этот выше массив является дочерним по отношению к основному массиву, называемому «полями».

У меня в голове что-то вроде этого:

Выполните цикл по основному массиву с именем fields>, если вы найдете массив с fieliD => ORStreet. Вернуть индекс этого массива.

Если невозможно получить индекс таким образом, я не возражаю, если я получу пару ключей ‘value’ => ‘Postbus52’.

0

Решение

<?php
$arr = [
[
'fieldId' => 'ORStreet',
'type' => 'TEXT',
'value' => 'Postbus 52',
],
[
'fieldId' => 'vbnm',
'type' => 'TEXT',
'value' => 'Postbus 52',
],
[
'fieldId' => 'ORStreet',
'type' => 'TEXT',
'value' => 'Postbus 52',
]
];
shuffle($arr);
foreach ($arr as $key => $value) {
if(array_key_exists("fieldId", $value) && $value["fieldId"] === "ORStreet"){
echo $key;
break;
}
}
?>

я использовал shuffle метод для моделирования случайности массива. Тогда у меня есть цикл через массив, чтобы соответствовать fieldId с указанным значением (ORStreet). Если получено совпадение, цикл завершится и отобразит индекс.

По-другому:

$filteredArr = array_pop(array_filter($arr, function ($a){
return array_key_exists("fieldId", $a) && $a["fieldId"] === "ORStreet";
}));
1

Другие решения

Вы можете использовать комбинацию array_map() а также array_flip()

$index = array_flip(array_map(function($val){
return $val["fieldId"];
}, $arr));
echo $index["ORStreet"];
// output: 11

Проверить результат в демонстрация

1

Еще одна возможность:

$result = array_keys(
array_combine(array_keys($fields), array_column($fields, "fieldId")),
"ORStreet");

array_column() извлекает все fieldId значения, а затем array_keys() ищет желаемое значение, возвращая соответствующие ключи массива.

Обратите внимание, что это вернет массив ключей. Если вам нужен только первый ключ, он вернет его как целое число:

$result = array_search(
"ORStreet",
array_combine(array_keys($fields), array_column($fields, "fieldId"))
);
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector