0

私はこの配列を持っています:

$categories = array(
    array('id' => 1,  'parent' => 0, 'name' => 'Category A'),
    array('id' => 2,  'parent' => 0, 'name' => 'Category B'),
    array('id' => 3,  'parent' => 0, 'name' => 'Category C'),
    array('id' => 4,  'parent' => 0, 'name' => 'Category D'),
    array('id' => 5,  'parent' => 0, 'name' => 'Category E'),
    array('id' => 6,  'parent' => 2, 'name' => 'Subcategory F'),
    array('id' => 7,  'parent' => 2, 'name' => 'Subcategory G'),
    array('id' => 8,  'parent' => 3, 'name' => 'Subcategory H'),
    array('id' => 9,  'parent' => 4, 'name' => 'Subcategory I'),
    array('id' => 10, 'parent' => 9, 'name' => 'Subcategory J'),
);

結果として、これが必要です: ($categories 配列の各カテゴリに対して単純で、完全な構造のリンクが必要です)

$result = array(
    '10' => 'Category D/Subcategory I/Subcategory J',
    '9' => 'Category D/Subcategory I',
    '8' => 'Category C/Subcategory H',
    '7' => 'Category B/Subcategory G',
    '6' => 'Category B/Subcategory F',
    '5' => 'Category E',
    '4' => 'Category D',
    '3' => 'Category C',
    '2' => 'Category B',
    '1' => 'Category A')
);

その後、$result[9] でリンクを呼び出し、パス「カテゴリ D/サブカテゴリ I」を取得できます。アドバイスありがとうございます。

4

1 に答える 1

1

以下の機能はあなたのために働くはずです。

注: この関数は、配列アイテムが順序付けられていることを前提としているため、アイテムは配列内のさらに下にある別のアイテムに依存しません (つまり、トポロジー的にソートされています)。

function build_structure($arr) {
    $output = array();
    foreach ($arr as $item) {
        $value = ($item['parent'] == 0) ? $item['name'] :
                     $output[$item['parent']] . '/' . $item['name'];
        $output[$item['id']] = $value;
    }
    return $output;
}
于 2013-10-31T21:37:49.613 に答える