Наиболее эффективный способ обходить вложенный массив определенным образом и вносить в него изменения - PullRequest
0 голосов
/ 12 марта 2012

У меня есть массив, представляющий меню, и для всех намерений и целей его можно считать бесконечно вложенным.

Структура выглядит так

array(
  0 => array(
         'label' => 'Item1',
         'link' => 'http://google.com',
         'children' => null
  )

  1 => array(
         'label' => 'Item2',
         'link' => 'http://google.com',
         'children' => array( 3 => array(
                                     'label' => 'SubmenuItem1',
                                     'link' => 'http://www.yahoo.com',
                                     'children' => null
                        )
          )
  )

  2 => array(
         'label' => 'Item3',
         'link' => 'http://google.com',
         'children' => null
  )
)

Я хотел бы выполнить операцию сравнения со всеми link в структуре. Как только сравнение вернет true, мы должны выполнить некоторую операцию с этим элементом и затем остановить процесс.

Однако выгода заключается в том, что сравнение должно начинаться с самого длинного link в структуре, а затем двигаться к самому короткому link. Если имеется несколько ссылок одинаковой длины, будет использоваться первая посещенная.

Моей первоначальной мыслью было сделать следующее:

  • Прохождение по всему массиву, сбор всех ссылок и сохранение их в ассоциативном массиве с использованием ключа в качестве ключа и ссылки в качестве содержимого:

    array( 0 => 'http://google.com', 1 => 'http://google.com', 2 => 'http://google.com', 3 => 'http://yahoo.com', )

  • Затем отсортируйте массив по длине его содержимого.

  • Выполните операцию сравнения и запишите ключ элемента.

  • Вернитесь к исходному массиву и найдите отмеченный ключ, а затем сделайте что-нибудь с этим элементом.

Это лучший способ сделать это? Есть ли более эффективные способы сделать это?

Я кодирую это в PHP, но этот вопрос не зависит от платформы.

1 Ответ

0 голосов
/ 12 марта 2012

Ваше решение звучит нормально. Однако я бы сохранил конкретные индексы ссылок, собирая их на шаге 1, чтобы вам не пришлось снова выполнять весь поиск на шаге 4, а вместо этого получить доступ к записи напрямую.

...