2016-08-05 6 views
0

私は、ページの不足しているデータを埋めるために、HTMLページテンプレートに渡すデータの配列を持っています。ここに私が持っているアレイと発生している問題があります。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" 
      ] 
     ] 
    ] 
]; 

ここに、私が動作させるために使用していたコードがあります。

// $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"; 
} 

そして、あなたは$データを置き換えるのではなく見ることができるように、私はそれから

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" 
     } 
    } 
    } 
} 

を得た結果に文字列であることからNEW TITLE、変更のテキストに[ボディ] [タイトル] [テキスト] 2つの値を保持する配列私はarray_merge_recursiveがこの理由であることを理解しています。私はちょうど値がすでに配列である場合に配列を作成するコードを記述しようとしていて、そうでない場合には値を置き換えようとしているのです。

たとえば、特別なナビゲーションを使用してテンプレートページを作成した場合、$ data ["navigation" ["links"] ["sublinks"] ["sublink1"、 "sublink2"、 "sublink3" ]。array_merge_recursiveと()私はサブリンク列を追加し、同時に「NEW TITLE」と「OLD TITLE」を置き換えることはできません。任意の助けコミュニティのための

おかげで提供することができます!

答えて

0

私はそれをシンプルに保つだろうarray_merge_recursiveの代わりに値を直接設定してください。

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

私が見ている1つの問題は私ですuldは単にそれらに追加するのではなく、デフォルトを再表示する必要があります。 編集:if $ navigation = ["sublinks"] ["link1"、 "link2"]; $ data ["body"] ["navigation"]は "links"セクションを含まなくなります。 – MisterQuacker