0

多次元配列を並べ替えようとしています (実際、常に 1 つの次元のみを並べ替えているため、多次元であることは重要ではありません)。

function orderSort($a, $b) {
    if ($a['order'] == $b['order']) return 0;

    return($a['order'] < $b['order']) ? -1 : 1;
}

$nav = array(
    "section" => array(
        "header" => array(),
        "main" => array()
    ),
    "link" => array(
        "header" => array(),
        "main" => array()
    )
);

$DATA = array(
    array(
        "type" => "section",
        "subtype" => "main",
        "data" => array("name" => "/Basic", "order" => 1, "parent" => "bbb")
    ),
    array(
        "type" => "link",
        "subtype" => "main",
        "data" => array("name" => "Home", "link" => array("/"), "order" => 1, "parent" => "/Basic")
    )
);

foreach($DATA as $ele) {
    if(!array_key_exists($ele['data']['parent'], $nav[$ele['type']][$ele['subtype']]))
        $nav[$ele['type']][$ele['subtype']][$ele['data']['parent']] = array($ele['data']);
    else
        array_push($nav[$ele['type']][$ele['subtype']][$ele['data']['parent']], $ele['data']);
    }

var_dump($nav['section']['main']);
echo '<br><br>';

foreach($nav['section']['main'] as $ele) {
    uasort($ele, 'orderSort');
    $nav['section']['main'] = $ele;
}

var_dump($nav['section']['main']);

最初のvar_dump戻り値:

array(1) { 
    ["bbb"]=> array(1) { 
        [0]=> array(3) { 
            ["name"]=> string(6) "/Basic" 
            ["order"]=> int(1) ["parent"]=> string(3) "bbb" 
        } 
    } 
} 

ご覧のとおり、bbb(非常に概念的な) という名前のキーがあります。2番目の出力:

array(1) { 
    [0]=> array(3) { 
        ["name"]=> string(6) "/Basic" 
        ["order"]=> int(1) 
        ["parent"]=> string(3) "bbb" 
    } 
}

突然bbbなくなりました。実際、配列全体 (要素が 1 つだけ) が消えています。

私の質問は、どうにかしてこれが起こらないようにすることはできますか? この種の最適化を求めたことはありません。もちろん、これを 1 つの要素だけで並べ替えても意味はありませんが、それでもなおです。

4

2 に答える 2