2017-10-11 1 views
1

Ich suchte, aber ich fand nicht genau, was ich brauchte.Wert in das dynamische mehrdimensionale Array einfügen

Quelle Struktur ist dynamisches Menü Arraystruktur von MySQL-Datenbank generieren:

array (
  2 => array (
    'title' => 'item', 
    'children' => array (
      10 => array (
        'title' => 'item', 
        'children' => array (
          14 => array (
            'title' => 'item', 
          ), 
          15 => array (
            'title' => 'item', 
          ), 
          16 => array (
            'title' => 'item', 
            'children' => array (
              23 => array (
                'title' => 'item', 
              ), 
              24 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          17 => array (
            'title' => 'item', 
            'children' => array (
              20 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          18 => array (
            'title' => 'item', 
          ), 
          19 => array (
            'title' => 'item', 
          ), 
          32 => array (
            'title' => 'item', 
            'children' => array (
              33 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          59 => array (
            'title' => 'item', 
          ), 
          60 => array (
            'title' => 'item', 
            'children' => array (
              61 => array (
                'title' => 'item', 
              ), 
              62 => array (
                'title' => 'item', 
              ), 
            ), 
          ), 
          67 => array (
            'title' => 'item', 
          ), 
        ), 
      ), 
      12 => array (
        'title' => 'item', 
      ), 
      13 => array (
        'title' => 'item', 
      ), 
    ), 
  ), 
) 

Ich muß passiere alle Datensätze und neuen Wert hinzufügen, um den aktuellen Ort benötigt, wo die foreach tatsächlich ist. Jetzt kann ich mit dieser Funktion für die Aufzeichnung Datensatz untersuchen:

function categorize($menu, $level = 0) 
{ 
    foreach ($menu as $key => &$data) 
    { 
     if (isset ($data['children'])) 
     { 
      categorize($data['children'], ($level + 1)); 
     } 
    } 
} 

haben aber keine Ahnung, wie neue Wert an der richtigen Stelle hinzuzufügen. der Ausgang muss wie folgt aussehen:

array (
  2 => array (
    'level' => 0, 
    'first-item' => true, 
    'title' => 'item', 
    'children' => array (
      10 => array (
        'level' => 1, 
     'first-item' => true, 
        'title' => 'item', 
        'children' => array (
          14 => array (
            'level' => 2, 
      'first-item' => true, 
            'title' => 'item', 
          ), 
          15 => array (
            'level' => 2, 
            'title' => 'item', 
          ), 
          16 => array (
            'level' => 2, 
            'title' => 'item', 
            'children' => array (
              23 => array (
                'level' => 3, 
                'first-item' => true, 
                'title' => 'item', 
              ), 
              24 => array (
                'level' => 3, 
                'title' => 'item', 
              ), 
            ), 
          ), 
          17 => array (
         'level' => 2, 
            'title' => 'item', 
            'children' => array (
              20 => array (
                'level' => 3, 
                'title' => 'item', 
              ), 
            ), 
          ), 
          18 => array (
         'level' => 2, 
            'title' => 'item', 
          ), 
          19 => array (
         'level' => 2, 
            'title' => 'item', 
          ), .... 

Danke für Ihre Hilfe

+0

Stehen Sie gerade php oder mit einem mit Rahmen wie Laravel? – kerrin

+0

Ich benutze gerade php. – netoper

Antwort

0

Sie verwenden könnten Referenzierung und Rekursion gewünschten Ausgang zu erreichen:

function processTitles(array &$titles, $level = 0) { 
    $i = 0; 

    foreach ($titles as &$title) { 
     $title['level'] = $level; 
     $title['first-item'] = ++$i === 1; 

     if (!empty($title['children'])) { 
      processTitles($title['children'], ++$level); 
     } 
    } 
} 

$titles = [ 
    // The input data that you posted 
]; 

processTitles($titles); 

var_dump($titles); 
+0

das ist es genau. Danke! – netoper

+0

eine Frage .. wo kann ich mehr über $ title ['first-item'] = ++ $ i === 1; Ich habe das noch nie zuvor gesehen. – netoper

+0

++ $ i erhöht den Wert von $ i um 1, bevor der Vergleichsoperator === aufgerufen wird. Der Vergleich mit 1 ergibt einen booleschen Wert. '$ title ['first-item'] = ++ $ i === 1;' ist eine Kurzschrift: 'if (++ $ i === 1) { $ title [' Erstes Element '] = wahr; } else { $ title ['first-item'] = false; } ' –

Verwandte Themen