@Shimpanze

PHP foreach: почему валится с ошибкой?

Добрый день!

Есть переменная $process с текстом:

$process = <<<TEXT
Lorem ipsum
Lorem ipsum
Lorem ipsum
TEXT;


Разделяю этот текст по символу конца строки:

$process = preg_split( "/[\n]/", $process );

Затем, мне необходимо обработать каждый элемент этого массива и вернуть в переменную $process опять одним блоком текста. Чтобы получилось так (для примера):

$process = <<<TEXT
<span><b>Lorem</b> ipsum</span>
<span><b>Lorem</b> ipsum</span>
<span><b>Lorem</b> ipsum</span>
TEXT;


Я перебираю массив, обрабатываю его и помещаю сразу в переменную:

$process = foreach( $process as $value ) {
  // Здесь if(), else и т. д.
  "<span>" . $value . "</span>";
}

return $process; // echo здесь не подходит, поскольку надо вернуть в переменную


И переменная $process ничего не возвращает и валится с ошибкой. Почему?

Спасибо!
  • Вопрос задан
  • 341 просмотр
Решения вопроса 2
gromdron
@gromdron
Работаю с Bitrix24
Пытался наиболее подробно все изложить и разжевать:

/* @var string Исходный текст в синтаксисе HEREDOC */
$process = <<<TEXT
Lorem ipsum
Lorem ipsum
Lorem ipsum
TEXT;

/**
 * Оборачивает элемент в тег <span>
 * @param type $element 
 * @return type
 */
function spanElement( $element )
{
	return "<span>{$element}</span>";
}

// Получаем построчно исходный текст
// примечание: если есть средство работающее без регулярок, то лучше использовать его
$arProcess = explode("\n", $process);

// Применяем к каждому элементу нашу функцию, модицифируя ее значения
// см: http://php.net/array-map
$arProcess = array_map('spanElement', $arProcess);

/*
При вызове var_dump на $arProcess результат будет следующим:

array(3) {
  [0] =>
  string(24) "<span>Lorem ipsum</span>"
  [1] =>
  string(24) "<span>Lorem ipsum</span>"
  [2] =>
  string(24) "<span>Lorem ipsum</span>"
}
*/

// Вновь объединяем это все в исходный текст
$process = implode("\n", $arProcess);

/*
При вызове var_dump на $process результат будет следующим:

string(74) "<span>Lorem ipsum</span>
<span>Lorem ipsum</span>
<span>Lorem ipsum</span>"

*/


Для усвоения работы foreach, рекомендую ознакомиться с документацией: php.net/manual/ru/control-structures.foreach.php
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
$clean = '';

foreach( $process as $value ) {
  // Здесь if(), else и т. д.
  $clean .= "<span>" . $value . "</span>";
}

return $clean;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Вот интересно, на что вы рассчитываете, когда задаете вопрос об ошибке, но саму ошибку не показываете. Там обычно пишется текст, который, можно и нужно(!) прочесть.

И у конструкции foreach нет возвращаемого значения. Запись типа $my_var = foreach ... ошибочна уже сама по себе.
Ответ написан
Комментировать
Decadal
@Decadal
$process = foreach( $process as $value ) {
// Здесь if(), else и т. д.
"" . $value . "";
}


вы ... присваиваете $process foreach? вы уверены что оно так работает?
Попробуйте
foreach($process as &$value) {
$value = "<span>" . $value . "</span>";
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽