2016-08-05 2 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 제목에 문자열 인에서 텍스트를 변경 2 개의 값을 보관 유지하는 배열 array_merge_recursive가 그 이유라고 생각합니다. 나는 값이 이미 배열 일 때 배열을 생성하고 그렇지 않은 경우 값을 대체하는 코드를 작성하는 데 어려움을 겪고 있습니다.

예를 들어 특별한 탐색 기능이있는 템플릿 페이지가있는 경우 $ data [ "navigation"[ "links"] [ "sublinks"] [ "sublink1", "sublink2", "sublink3" ]. array_merge_recursive()와 나는 sublinks 배열을 추가 할 수 없습니다 동시에 "NEW TITLE"와 "OLD TITLE"를 대체합니다.

감사를 어떤 사회가 제공 할 수있는 도움을!

답변

0

을 나는 간단하게 것 array_merge_recursive 대신 직접 값을 설정하십시오.

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

내가보기에는 하나의 문제입니다. uld는 기본값을 추가하는 대신 기본값을 다시 말해야합니다. 편집 : if $ navigation = [ "sublinks"] [ "link1", "link2"]; $ data [ "body"] [ "navigation"]는 더 이상 "links"섹션을 포함하지 않습니다. – MisterQuacker