Заменить строку списком строк из массива php

У меня есть файл php с кодовыми блоками, например

$error_arr =  array();
foreach{
    try{
            INSERT DATA
    }catch(Exception $e){
        $error_arr = $e;
    }
}


$data_arr = [
        'filename' => $filename,
        'user_name' => $user_name,
        'error' => $error_arr
    ];

Здесь исключение будет перехвачено и сохранено в $error_arr, а затем в data_arr['error'].

В почтовом файле я заменяю как

  $array_from_to = array (
            '[[USER_NAME]]' => $this->data_arr['user_name'],
            '[[FILENAME]]' => $this->data_arr['filename'],
            '[[ERROR]]' => $this->data_arr['error']
        );

        $data->content = str_replace(array_keys($array_from_to), $array_from_to, $data->content);



   {{OTHER STUFF of mail content}}

    [[ERROR]]

   {{OTHER STUFF of mail content}}

Теперь в этом блоке ошибок я хочу отобразить все ошибки из массива. Так как этот номер ошибки может быть от 0 до любого числа. Но в настоящее время отображается только последняя ошибка. Как я могу показать все ошибки в виде упорядоченных списков.


person Community    schedule 14.12.2018    source источник
comment
Избавьтесь от вызова array_keys и просто используйте strtr() для замены.   -  person mickmackusa    schedule 14.12.2018
comment
Итак, ваш вопрос: как вставить данные в массив?   -  person mickmackusa    schedule 14.12.2018


Ответы (1)


Вам нужно сделать 2 изменения, первое - сохранить массив ошибок - вы каждый раз перезаписываете ошибку...

$error_arr[] = $e;

Во-вторых, как построить массив ошибок в строку для замены, простой способ - использовать implode()...

'[[ERROR]]' => implode(",", $this->data_arr['error'])

Вы можете изменить способ его отображения, но это просто предоставит список ошибок, разделенных запятыми.

Обновление:

Если вы хотите указать ошибку, вы можете добавить простой цикл foreach() для создания строки в формате, который вы использовали после...

$error = '';
foreach ( $data_arr['error'] as $key => $text )    {
    $error .= ($key+1)." - ". $text.PHP_EOL;
}

а потом

'[[ERROR]]' => $error
person Nigel Ren    schedule 14.12.2018
comment
@micmackusa, проблема у меня с этим в том, что он исправляет представление ошибок. Если оставить его в виде массива, это означает, что вызывающая сторона может представить ошибки любым способом, который им нужен. - person Nigel Ren; 14.12.2018
comment
@NigelRen Хорошо, я понял. Но можете ли вы предложить мне, как я могу представить эту ошибку с помощью числовых списков. Поскольку запятые (,) разделены в данный момент нечетко. - person ; 14.12.2018