好吧我完全坚持这个,它应该很简单。
我有两个数组:
array(2) {
[0]=>
array(7) {
["id"]=>
string(1) "4"
["name"]=>
string(9) "Page name"
["content"]=>
string(133) "<div class="content col-lg-12">[Jumbo]</div><div class="content col-lg-12">[Jumbo]</div><div class="content col-lg-12">[Footer]</div>"
["container"]=>
string(1) "0"
["background"]=>
string(7) "#ff7676"
["homepage"]=>
string(1) "1"
["active"]=>
string(1) "1"
}
[1]=>
array(7) {
["id"]=>
string(1) "7"
["name"]=>
string(8) "Layout 1"
["content"]=>
string(119) "<div class="content col-lg-12">[Header]</div><div class="content col-lg-12"></div><div class="content col-lg-12"></div>"
["container"]=>
string(1) "1"
["background"]=>
string(7) "#ff7676"
["homepage"]=>
string(1) "1"
["active"]=>
string(1) "1"
}
}
和
array(2) {
[0]=>
array(9) {
["id"]=>
string(1) "8"
["name"]=>
string(5) "Jumbo"
["headCSS"]=>
string(0) ""
["classes"]=>
string(39) "jumbotron module col-lg-6 round-corners"
["inlineCSS"]=>
string(144) "background: none repeat scroll 0% 0% rgb(229, 255, 135); border-width: 3px; border-style: solid; border-color: rgb(45, 152, 255); padding: 10px;"
["element"]=>
string(247) " <div style="background: none repeat scroll 0% 0% rgb(229, 255, 135); border-width: 3px; border-style: solid; border-color: rgb(45, 152, 255); padding: 10px;" class="jumbotron module col-lg-6 round-corners">Example</div> "
["type"]=>
string(6) "header"
["size"]=>
string(1) "6"
["content"]=>
string(7) "Example"
}
[1]=>
array(9) {
["id"]=>
string(2) "12"
["name"]=>
string(6) "Footer"
["headCSS"]=>
string(0) ""
["classes"]=>
string(30) "module round-corners col-lg-10"
["inlineCSS"]=>
string(64) "background: none repeat scroll 0% 0% transparent; padding: 10px;"
["element"]=>
string(143) "<footer style="background: none repeat scroll 0% 0% transparent; padding: 10px;" class="module round-corners col-lg-10"><p>Raaaa!</p>
</footer>"
["type"]=>
string(6) "footer"
["size"]=>
string(2) "10"
["content"]=>
string(14) "<p>Raaaa!</p>
"
}
}
基本上我想将第一个数组[content]中的[xxx]的出现替换为与数组[name]匹配的第二个数组[element]。希望有意义(?!)
到目前为止,我已经尝试过这个:
foreach($array1 as $layout) {
foreach($array2 as $module) {
$needle = "[" . trim($module['name']) . "]";
$pages[$layout['name']] = str_replace($needle, $module['element'], $layout['content']);
};
};
然而,这似乎只是替换了第一个array2元素中匹配的内容而不是所有内容。
任何想法都错了吗?
作为旁注,iv做了一些阅读,并认为使用strtr()可能会更容易,但我不确定这是否可能与我的数据。对此的任何建议都会很棒!
答案 0 :(得分:2)
问题是,您始终使用$layout['content']
作为str_replace
中的主题,而不是更新的$pages[$layout['name']]
。所以你没有合并所有的替代品,你用新的替代品覆盖旧的替代品。
您可以通过将搜索和替换字符串数组提供给str_replace()
来一次执行所有替换来解决此问题。
$searches = array();
$replacements = array();
foreach ($array2 as $module) {
$searches[] = "[" . trim($module['name']) . "]";
$replacements[] = $module['element'];
}
foreach ($array1 as $layout) {
$pages[$layout['name']] = str_replace($searches, $replacements, $layout['content']);
}