У меня есть следующая таблица базы данных:
Она возвращает все заголовки столбцов на картинке, но наиболее важными являются slug и parent (не уверен насчет id_button).
Массив автоматически упорядочивается с помощью id_button ASC, что меня очень раздражает. Но, в любом случае, это не важно, так как мне нужно заказать его совершенно иначе или переупорядочить после того, как массив будет заполнен.
Массив возвращает это в порядке id_button:
$new_menu_buttons = array(
0 => array(
'id_button' => 1,
'parent' => 'help',
'position' => 'child_of',
'slug' => 'testing',
),
1 => array(
'id_button' => 2,
'parent' => 'packages',
'position' => 'after',
'slug' => 'sub_test_1',
),
2 => array(
'id_button' => 3,
'parent' => 'google.com',
'position' => 'after',
'slug' => 'another_test',
),
3 => array(
'id_button' => 4,
'parent' => 'testing'
'position' => 'child_of',
'slug' => 'google.com',
)
);
Мне нужно упорядочить его так, чтобы если слаг
был найден внутри любого родительского
, то слага
, который находится в родительском
, необходимо загрузить до того, который определен в родительском элементе.
Неважно, если он прямо перед ним.Например, вы видите тестирование
- это первый слаг
, который возвращается, но все же родительский элемент для этого - последний слаг (google.com). Поэтому до тех пор, пока строка заголовка, в которой определен родительский элемент, упорядочена так, что она находится ПЕРЕД строкой, имеющей значение заголовка в родительском столбце, все в порядке.
Таким образом, в этой ситуации он может быть переупорядочен как любой из этих трех упорядоченных массивов ниже:
$new_menu_buttons = array(
0 => array(
'id_button' => 1,
'parent' => 'help',
'position' => 'child_of',
'slug' => 'testing',
),
1 => array(
'id_button' => 2,
'parent' => 'packages',
'position' => 'after',
'slug' => 'sub_test_1',
),
2 => array(
'id_button' => 4,
'parent' => 'testing',
'position' => 'child_of',
'slug' => 'google.com',
),
3 => array(
'id_button' => 3,
'parent' => 'google.com'
'position' => 'after',
'slug' => 'another_test',
)
);
ИЛИ этот ...
$new_menu_buttons = array(
0 => array(
'id_button' => 1,
'parent' => 'help',
'position' => 'child_of',
'slug' => 'testing',
),
1 => array(
'id_button' => 4,
'parent' => 'testing',
'position' => 'child_of',
'slug' => 'google.com',
),
2 => array(
'id_button' => 2,
'parent' => 'packages',
'position' => 'after',
'slug' => 'sub_test_1',
),
3 => array(
'id_button' => 3,
'parent' => 'google.com'
'position' => 'after',
'slug' => 'another_test',
)
);
ИЛИ даже этот ...
$new_menu_buttons = array(
0 => array(
'id_button' => 1,
'parent' => 'help',
'position' => 'child_of',
'slug' => 'testing',
),
1 => array(
'id_button' => 4,
'parent' => 'testing',
'position' => 'child_of',
'slug' => 'google.com',
),
2 => array(
'id_button' => 3,
'parent' => 'google.com'
'position' => 'after',
'slug' => 'another_test',
),
3 => array(
'id_button' => 2,
'parent' => 'packages',
'position' => 'after',
'slug' => 'sub_test_1',
)
);
Все 3 из этих упорядоченных массивов будут работать, потому что массив с slug
, который соответствует родительскому
, находится перед массивом с совпадающим родительским
], и, поскольку значение slug, sub_test_1
не не соответствует ни одному из значений parent
, этот порядок массива не важен, поэтому массив может быть расположен в любом месте внутри массива.
Как я могу это сделать? Я думаю о том, чтобы просто как-то пройтись по массиву и попытаться определить, находится ли слаг в каком-либо из родителей, и просто как-то изменить порядок ...
Короче говоря, slug
должен быть быть упорядоченным перед родительским
ТОЛЬКО если существует родительский
, который соответствует слагу
в массиве. В противном случае, если совпадений не найдено, порядок не имеет значения.