У меня есть массив, представляющий меню, и для всех намерений и целей его можно считать бесконечно вложенным.
Структура выглядит так
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, но этот вопрос не зависит от платформы.