Как изменить порядок этого массива?

У меня есть следующая таблица базы данных:

couldn't be bothered with an image description, I guess

Она возвращает все заголовки столбцов на картинке, но наиболее важными являются 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 должен быть быть упорядоченным перед родительским ТОЛЬКО если существует родительский , который соответствует слагу в массиве. В противном случае, если совпадений не найдено, порядок не имеет значения.

5
задан SoLoGHoST 28 September 2011 в 18:25
поделиться