Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Implementierungscode zum Erhalten eines N-Schicht-Klassifizierungsbaums aus einem zweidimensionalen Array

PHP-Implementierungscode zum Erhalten eines N-Schicht-Klassifizierungsbaums aus einem zweidimensionalen Array

高洛峰
高洛峰Original
2016-12-20 15:30:101222Durchsuche

Die Produktkategorien des Unternehmens werden in einer Tabelle gespeichert, wobei „mid“ die übergeordnete Kategorie identifiziert. Für nachfolgende Vorgänge muss ein hierarchisches Array erstellt werden.

Nachdem ich eine Weile darüber nachgedacht hatte, fiel mir keine Möglichkeit ein, die Datenbank wiederholt zu lesen, oder eine Operation, die keine Rekursion erforderte.

Datenquelle: (Die Daten erfordern, dass die ID des eindimensionalen Schlüssels und des entsprechenden zweidimensionalen Wertarrays identisch sein müssen)

$items = array(
    1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),
    2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),
    3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),
    4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),
    5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),
    6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),
    7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),
    8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),
    9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),
    10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),
    11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),
    12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),
    13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),
    14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),
    15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),
    16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),
    17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),
    18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),
    19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
);

Baumfunktion generieren:

function genTree9($items) {
    $tree = array();
    foreach ($items as $item)
        if (isset($items[$item['pid']]))
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        else
            $tree[] = &$items[$item['id']];
    return $tree;
}

Natürlich. Wenn die Daten bestimmte Bedingungen erfüllen, kann die Funktion auf nur 5 Zeilen reduziert werden:

function genTree5($items) {
    foreach ($items as $item)
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}

Einmal Schleife, Speicherreferenz. Sparen Sie Zeit und Platz.

Weitere Artikel zum Implementierungscode von PHP zum Erhalten eines N-Layer-Klassifizierungsbaums aus einem zweidimensionalen Array finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn