1

私はそのような配列を持っています:

<?php
array(
    array(
        'id' => 1,
        'parent_id' => null
    ),
    array(
        'id' => 2,
        'parent_id' => 1
    ),
    array(
        'id' => 3,
        'parent_id' => null
    ),
    array(
        'id' => 4,
        'parent_id' => 2
    )
)

私はそれをすべての子供に分類する必要がありますそれは直接の親の後に来ます。したがって、ID4のアイテムはID2の直後に来るはずです。

ありがとう。

4

2 に答える 2

3

この実用的なソリューションは、array_multisort()で機能します。

試してみてください:

$data = array(
    array(
        'id' => 1,
        'parent_id' => null
    ),
    array(
        'id' => 2,
        'parent_id' => 1
    ),
    array(
        'id' => 3,
        'parent_id' => null
    ),
    array(
        'id' => 4,
        'parent_id' => 2
    )
);

$parent_ids = array();
foreach ($data as $item) {
    $parent_ids[]  = $item['parent_id'];
}

array_multisort($parent_ids, SORT_ASC, $data);

値を最後にしたい場合は、次nullのように置き換えforeachます。

foreach ($data as $item) {
    if (is_null($item['parent_id'])) {
        $item['parent_id'] = PHP_INT_SIZE;
    }
    $parent_ids[]  = $item['parent_id'];
}

結果を参照してください:print_r($data);

于 2012-12-01T16:30:53.327 に答える
1

実用的な解決策:PHPにはユーザー定義の並べ替え関数uasortがあります。これを使用して配列を並べ替えました。

<?php
$data = array(
    array(
        'id' => 1,
        'parent_id' => null
    ),
    array(
        'id' => 2,
        'parent_id' => 1
    ),
    array(
        'id' => 3,
        'parent_id' => null
    ),
    array(
        'id' => 4,
        'parent_id' => 2
    )
);



function cmp($a, $b) {    
    if ($a['parent_id'] == $b['parent_id']) {
        return 0;
    }
    return ($a['parent_id'] < $b['parent_id']) ? -1 : 1;
}

uasort($data, 'cmp');
echo '<pre>';
print_r($data);
echo '</pre>';
于 2012-12-01T16:37:58.747 に答える