У меня есть таблица базы данных следующим образом:
![couldn't be bothered with an image description, I guess](https://i.stack.imgur.com/74n05.png)
Возвращает все заголовки столбцов на рисунке, но наиболее важными являются 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',
)
);
Мне нужно упорядочить его так, чтобы, если slug
был найден в любом parent
, тогда slug
, который находится в parent
, должен быть загружен до того, который определен в родительском элементе.,
Это не важно, если это прямо перед ним.Например, вы видите, что testing
является первым slug
, который возвращается, и все же родительским для него является последний слаг (google.com).Таким образом, до тех пор, пока строка пули, в которой определен родительский элемент, упорядочена таким образом, что ДО строки, имеющей значение пули в родительском столбце, все в порядке.
Так что в этой ситуации ее можно переупорядочитькак любой из этих 3 упорядоченных массивов ниже:
$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
, который соответствует parent
, находится перед массивом с совпадающим parent
, и, поскольку значение slug, sub_test_1
не соответствует ни одному из значений parent
этот порядок массивов не имеет значения, поэтому массив может быть расположен в любом месте массива.
Как я могу это сделать?Я думаю о том, чтобы просто каким-то образом пройтись по массиву и попытаться определить, есть ли слаг в каком-либо из родителей, и просто сделать переупорядочение каким-либо образом ...
Короче, slug
должен бытьзаказывается до parent
ТОЛЬКО если в массиве есть parent
, который соответствует slug
.В противном случае, если совпадений не найдено, порядок не важен.