У меня есть массив с индексом. Индекс не статичен и постоянно меняется.
$fields = [
11 => array (
'fieldId' => 'ORStreet',
'type' => 'TEXT',
'value' => 'Postbus 52',
),
];
Индекс вышеупомянутого - 11. Но иногда он становится другим числом. Одна вещь, которая всегда остается неизменной, - это fieldId. Как я могу получить индекс этого массива, зная только идентификатор поля.
Этот массив выше является дочерним по отношению к основному массиву под названием «поля».
В голове у меня что-то вроде этого:
Прокрутите основной массив с именем fields>, если вы найдете массив с fieliD => ORStreet. Верните индекс этого массива.
Если таким образом получить индекс невозможно, я бы не стал возражать, если бы получил пару ключей 'value' => 'Postbus52'.
Если вам ни для чего не нужен 11, то, вероятно, проще всего просто использовать array_column для повторной индексации массива с помощью fieldId и прямого доступа к элементу.
@AlexHowansky, я еще этого не делал, потому что понятия не имею, как подойти к этому.






Вы можете использовать комбинацию array_map() и array_flip()
$index = array_flip(array_map(function($val){
return $val["fieldId"];
}, $arr));
echo $index["ORStreet"];
// output: 11
Проверить результат в демонстрация
<?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";
}));
Еще одна возможность:
$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"))
);
попробуйте
array_keys- php.net/manual/en/function.array-keys.php