@RomyGalaxy

Почему в моем коде заменяется только одно значение, а не все?

Есть массив стилей,
$this->_styles = array(
            'body' => 'margin: 0 0 0 0; padding: 10px 10px 10px 10px; background: #ffffff; color: #000000; font-size: 14px; font-family: Arial, Helvetica, sans-serif; line-height: 18px;',
            'a' => 'color: #003399; text-decoration: underline; font-size: 14px; font-family: Arial, Helvetica, sans-serif; line-height: 18px;',
            'table' => 'border: 1px solid #000;',
        );

и функция которая принимает в себе пустой html шаблон и вставляет между стили
public function htmlStyles ($html) {
        foreach ($this->_styles as $tag => $style) {
            $styles = $tag . '{' .$style. '}';
            $html = str_replace('</head>',$styles, $html);
        }
        return $html;
    }


но проблема в том, что проходит только один стиль из массива body, но если вывести их с помощью echo то выводятся все
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 3
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Заменяя </head> вы как минимум уже получаете невалидный html
Сделать можно так, при условии что у вас в $html есть </style> внутрь которого вы и хотите свои стили дописать
foreach ($this->_styles as $tag => $style) {
    $styles = $tag . '{' .$style. '}'."\n";
    $html = str_replace('</style>', $styles.'</style>', $html);
}
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
public function htmlStyles ($html) {
    $add = "";
    foreach ($this->_styles as $tag => $style) {
        $add .= "{$tag} \{{$style}\}\n";
    }
    return str_replace("</head>", "\n<style type='text/css'>\n{$add}</style>\n</head>", $html);
}
Ответ написан
Комментировать
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
$html = str_replace('</head>',$styles, $html);
на первой итерации у вас </head> заменяется, поэтому на следующих заменять уже нечего и ваш сгенерированный код не вставляется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы