试图通过在PHP中排序数组来模仿层次结构

时间:2011-01-26 22:35:27

标签: php arrays sorting

我试图在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 个答案:

答案 0 :(得分:1)

这样做你想要的吗?

$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
        )

)

答案 1 :(得分:0)

我没有看到你想要用来排序的标准。无论如何,您可以使用uasort function,在其中传递自定义函数作为参数,因此在该函数中,您可以定义要为数组排序的任何条件。该函数将接收2个参数(要比较的2个变量),您可以比较parent_id(或您要比较的任何内容)。要了解自定义函数应返回的内容,请查看this out

通过使用uasort而不是usort,您可以保留数组索引(如您在示例中所述)。