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

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

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

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

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

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

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

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

попробуйте array_keys - php.net/manual/en/function.array-keys.php

Mojo Allmighty 08.11.2018 16:29
«Прокрутите основной массив, называемый полями>, если вы найдете массив с fieliD => ORStreet. Верните индекс этого массива». Что вы получили, когда попробовали это?
Alex Howansky 08.11.2018 16:31

Если вам ни для чего не нужен 11, то, вероятно, проще всего просто использовать array_column для повторной индексации массива с помощью fieldId и прямого доступа к элементу.

iainn 08.11.2018 16:33

@AlexHowansky, я еще этого не делал, потому что понятия не имею, как подойти к этому.

kevin seda 08.11.2018 17:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
66
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать комбинацию 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"))
);

Другие вопросы по теме