Хорошо, полностью застрял на этом, это должно быть довольно просто.Сложная строка заменить
У меня есть два массива:
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>
"
}
}
В основном я хочу, чтобы заменить мест где [ххх] в первом массиве [контента] со вторым массивом [элемент] который соответствует массиву [name]. (?!) Надеюсь, что имеет смысл
До сих пор я попытался это:
foreach($array1 as $layout) {
foreach($array2 as $module) {
$needle = "[" . trim($module['name']) . "]";
$pages[$layout['name']] = str_replace($needle, $module['element'], $layout['content']);
};
};
Однако это только кажется, заменить содержание согласованного в первом элементе array2 и не все из них.
Любая идея в том, что случилось?
В качестве примечания, я сделал некоторое чтение и подумал, что проще было бы с помощью strtr(), но я не уверен, возможно ли это с моими данными. любой совет по этому было бы здорово!
При запросе вопроса user 'print_r' вместо' var_dump' для отображения информации. 'var_dump' добавляет ненужную информацию на вопрос, из-за которой сложнее читать – chanchal118
@ chanchal118 Нет,' var_dump' лучше. 'print_r' не отображает границы строк - вы не знаете, что в' $ array2 [1] ['content'] есть новая строка. ' – Barmar
@enigma Зачем ему это нужно? Он не использует 'preg_replace()'. – Barmar