2016-08-05 19 views
0

Ich versuche, ein Array von Daten an meine HTML-Seitenvorlagen übergeben werden, um fehlende Daten auf der Seite zu füllen. Hier ist das Array, das ich habe und das Problem, das auftritt.Kombinieren/Zusammenführen von Arrays in PHP

protected $data = [ 
    "head" => [ 
      "css" => ["main"], /*add other default css files here*/ 
      "meta" => ["description" => HTML_DESCRIPTION, "keywords" => HTML_KEYWORDS, "charset" => HTML_CHARSET], // add other meta data here 
      "JS" => [/*"src"*/], //set default js scripts here 
      "title" => [0 => HTML_TITLE] 
     ], 
    "body" => [ 
     "title" => [ 
      "text" => BODY_TITLE_TEXT 
     ], 
     "navigation" => [ 
      "links" => [ 
       "Home" => "home", 
       "Blog" => "blog" 
      ] 
     ] 
    ] 
]; 

Hier ist der Code, den ich verwendet habe, um es zum Laufen zu bringen.

// $title = ["text" => "NEW TITLE"] 

    public function build($title = [], $navigation = []){ 
    $defualts = $this->data; 
    $data_to_add["body"] = ["title" => $title, "navigation" => $navigation]; 
    $data = array_merge_recursive($defualts,$data_to_add); 
    require_once APP."/view/templates/body.php"; 
} 

Und die Ergebnisse, die ich von ihm bekam

array(2) { 
    ["head"]=> 
    array(4) { 
    ["css"]=> 
    array(1) { 
     [0]=> 
     string(4) "main" 
    } 
    ["meta"]=> 
    array(3) { 
     ["description"]=> 
     string(15) "DESCRIPTION" 
     ["keywords"]=> 
     string(41) "KEY1,KEY2,KEY3" 
     ["charset"]=> 
     string(5) "UTF-8" 
    } 
    ["JS"]=> 
    array(0) { 
    } 
    ["title"]=> 
    array(1) { 
     [0]=> 
     string(15) "SITE TITLE" 
    } 
    } 
    ["body"]=> 
    array(2) { 
    ["title"]=> 
    array(1) { 
     ["text"]=> 
     array(2) { 
     [0]=> 
     string(15) "OLD TITLE" 
     [1]=> 
     string(9) "NEW TITLE" 
     } 
    } 
    ["navigation"]=> 
    array(1) { 
     ["links"]=> 
     array(2) { 
     ["Home"]=> 
     string(4) "home" 
     ["Blog"]=> 
     string(4) "blog" 
     } 
    } 
    } 
} 

Wie Sie statt $ Daten ersetzt sehen [body] [title] [text] zu neuen Titel, ändert Text aus einem String ist zu ein Array mit zwei Werten. Ich verstehe, dass array_merge_recursive der Grund dafür ist. Ich habe nur Probleme, den Code zu schreiben, um ein Array zu erstellen, wenn der Wert bereits ein Array ist, und den Wert zu ersetzen, wenn dies nicht der Fall ist.

zum Beispiel, wenn ich eine Template-Seite mit einer speziellen Navigation hätte Ich möchte hinzufügen, $ data ["navigation] [" links "] [" sublinks "] [" sublink1 "," sublink2 "," sublink3 " ]. mit array_merge_recursive() ich kann ein sublinks Array nicht hinzufügen und „OLD TITEL“ mit „neuen Titel“ zur gleichen Zeit ersetzen.

Vielen Dank für jede der Gemeinde helfen können!

Antwort

0

ich es einfach halten würde und setze die Werte direkt anstatt array_merge_recursive:

$data = $this->data; 
$data['body']['title'] = $title; 
$data['body']['navigation'] = $navigation; 
+0

Ein Problem, das ich sehe, ist ich wo Sie müssen die Standardwerte neu festlegen, anstatt sie nur hinzuzufügen. edit: wenn $ navigation = ["sublinks"] ["link1", "link2"]; dann würde $ data ["body"] ["navigation"] den Abschnitt "links" nicht mehr enthalten. – MisterQuacker