У меня есть массив с индексом. Индекс не является статичным и постоянно меняется.
$fields = [
11 => array (
'fieldId' => 'ORStreet',
'type' => 'TEXT',
'value' => 'Postbus 52',
),
];
Индекс вышеупомянутого равен 11. Но иногда это становится другим числом.
Одна вещь, которая всегда остается неизменной, это fieldId. Как я могу получить индекс этого массива, зная только идентификатор поля.
Этот выше массив является дочерним по отношению к основному массиву, называемому «полями».
У меня в голове что-то вроде этого:
Выполните цикл по основному массиву с именем fields>, если вы найдете массив с fieliD => ORStreet. Вернуть индекс этого массива.
Если невозможно получить индекс таким образом, я не возражаю, если я получу пару ключей ‘value’ => ‘Postbus52’.
<?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";
}));
Вы можете использовать комбинацию array_map()
а также array_flip()
$index = array_flip(array_map(function($val){
return $val["fieldId"];
}, $arr));
echo $index["ORStreet"];
// output: 11
Проверить результат в демонстрация
Еще одна возможность:
$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"))
);