0

配列があり、この配列をマルチレベル配列でソートする必要があります。フィールドごとにグループ化しようとしていますが、機能させることができます。ここに私が持っている配列と私が欲しいものの例があります

Array
(
    [0] => Array
        (
            [id] => sports
            [title] => this is sports
        )

    [1] => Array
        (
            [id] => cricket
            [title] => this is cricket
            [under] => sports
        )

    [2] => Array
        (
            [id] => batsman
            [title] => this is batsman
            [under] => cricket
        )

    [3] => Array
        (
            [id] => sachin
            [title] => this is sachin
            [under] => batsman
        )

    [4] => Array
        (
            [id] => football
            [title] => this is football
            [under] => sports
        )

    [5] => Array
        (
            [id] => ronaldo
            [title] => this is ronaldo
            [under] => football
        )

)

この配列をグループ化して、このようにする必要があります

Array(
    [0] => Array(
        [id] => Array(
            [sports] => Array(
                [cricket] => Array(
                    [batsman] => sachin
                )
                [football] => fun
            )
        )
    )
)

私はこのようなことを試しましたが、うまくいきません

foreach($my_array as $item) {
    //group them by under
    $my_grouped_array[$item['under']][] = $item;
}

どんな提案も素晴らしいでしょう。

4

3 に答える 3

0

これが最も簡単な方法だと思います:

function getChildren($entry,$by_parent){
    $children = array();
    if (isset($by_parent[$entry['id']])){
        foreach ($by_parent[$entry['id']] as $child){
            $id = $child['id'];
            $children[$id] = getChildren($child,$by_parent);
        }
    }
    return $children;
}

$by_parent = array();
$roots = array();
foreach ($array as $entry){
    if (isset($entry['under'])){
        $by_parent[$entry['under']][] = $entry;
    } else {
        $roots[] = $entry;
    }
}
$result = array();
foreach ($roots as $entry){
    $id = $entry['id'];
    $result[$id] = getChildren($entry,$by_parent);
}
$results = array(array('id'=>$results));

注: これは質問で指定された形式ではありませが、質問は同じ親を持つ複数のリーフ ノードを処理する方法を定義していません。

于 2012-07-09T09:39:58.057 に答える
-1

PHP オブジェクトを使用します。

    function populateArray($my_array) {
    //Populate the array
    while ($my_array as $item) {
            $array[$item->id]['id'] = $obj->id;
            $array[$item->id]['name'] = $obj->name;
        }  
     return $array;
     }

$a = populateArray($array);    
echo $a[0]['id'].'<br />';
echo $a[0]['name'].'<br />';

または新しい foreach を使用します

于 2012-07-07T13:12:12.417 に答える