Попытка имитировать иерархию путем сортировки массива в PHP - PullRequest
1 голос
/ 27 января 2011

Я пытаюсь отсортировать массив следующим образом в PHP:

array
0 =>    id:1203
        parent_id: 456

1 =>    id:456
        parent_id:1723

2 =>    id:1723
        parent_id:0

к этому:

array   
0 =>    id:1723
        parent_id:0

1 =>    id:456
        parent_id:1723

2 =>    id:1203
        parent_id:456

Я никогда не сортировал массив в PHP раньше. Как бы вы это сделали?

Спасибо

Ответы [ 2 ]

1 голос
/ 27 января 2011

Делает ли это то, что вы хотите?

$arr = array(
    array('id' => 1203, 'parent_id' =>  456),
    array('id' =>  456, 'parent_id' => 1723),
    array('id' => 1723, 'parent_id' =>    0)
);

function compare($a, $b) {

    if ($a['parent_id'] == 0) return -1;
    if ($b['parent_id'] == 0) return 1;

    if ($a['id'] == $b['parent_id']) return -1;
    if ($b['id'] == $a['parent_id']) return 1;

    return 0;
}

usort($arr, 'compare');

print_r($arr);

выход:

Array
(
    [0] => Array
        (
            [id] => 1723
            [parent_id] => 0
        )

    [1] => Array
        (
            [id] => 456
            [parent_id] => 1723
        )

    [2] => Array
        (
            [id] => 1203
            [parent_id] => 456
        )

)
0 голосов
/ 27 января 2011

Я не вижу, какие критерии вы хотите использовать для сортировки. В любом случае, вы можете использовать функцию uasort , в которой вы передаете пользовательскую функцию в качестве аргумента, поэтому в этой функции вы можете определить любые критерии, которые вы хотите упорядочить в своем массиве. Эта функция получит 2 аргумента (2 переменные для сравнения), и вы можете сравнить оба parent_id (или что хотите сравнить). Чтобы узнать, что должна возвращать ваша пользовательская функция, отметьте this out .

Используя uasort вместо usort, вы можете сохранить индексы вашего массива (как вы сказали в своем примере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...