私は、ページの不足しているデータを埋めるために、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」を置き換えることはできません。任意の助けコミュニティのための
おかげで提供することができます!
私が見ている1つの問題は私ですuldは単にそれらに追加するのではなく、デフォルトを再表示する必要があります。 編集:if $ navigation = ["sublinks"] ["link1"、 "link2"]; $ data ["body"] ["navigation"]は "links"セクションを含まなくなります。 – MisterQuacker