Преобразовать массив PHP в читаемый текст

#php #arrays #email

#php #массивы #Адрес электронной почты

Вопрос:

Я новичок в PHP и пытаюсь прочитать массив из отправленной формы в $ _POST, и я использую этот код:

 $email_text = array(var_export($_POST, true));

$body = "";

foreach ($email_text as $key => $value) {
    $body .=  $value;
}
  

Затем прикрепив $body к $email_body

Моя проблема в том, что массив поступает в эту форму

 array (
  'email' => 'xxx@gmail.com',
  'phone' => '123123',
  'Patients' =>
  array (
    0 =>
    array (
      'name' => 'xxx',
      'lastname' => 'xxxx',
      'medication_str' => '12312312',
    ),
    1 =>
    array (
      'name' => '123',
      'lastname' => '123',
      'medication_str' => '123',
    ),
  ),
)
  

Когда я пытаюсь отсортировать его с помощью foreach, это не работает.

Мой желаемый формат в HTML был бы:

 email: value
phone: value

Patients
1 -
name: value
lastname: value
medication_str:  value

2 -
name: value
lastname: value
medication_str: value
  

Заранее благодарю вас, любая помощь высоко ценится.

P.S электронная почта в порядке, и функция электронной почты:

 if (empty($errors)) {
    $to = $myemail;
    $email_subject = "xxx";
    $email_body = $body;

    $headers = "From: xx@xx.comn";

    mail($to, $email_subject, $email_body, $headers);
    //redirect to the 'thank you' page
    header('Location: web-form-thank-you.html');
}
  

Комментарии:

1. где ошибка и какой код вызывает ошибку, вы не объяснили эту часть, или, может быть, я не понял, вы заполняете меня здесь.:-)

2. @waanofii.tech на самом деле ошибки нет. Выходные данные отображаются в виде массива в теле электронного письма, что мне не нравится, см. код 2.

Ответ №1:

Я написал следующий код, предполагая, что приведенный выше вывод массива является выводом $body вы можете скопировать и вставить следующее и обратите внимание, что я изменил ваше $body имя переменной на $array и использовал body для извлечения данных из переменной, которую я создал $array в этом случае. Надеюсь, это исправит вашу проблему, если у вас возникнут какие-либо дополнительные проблемы, не стесняйтесь спрашивать в комментарии. мир 🙂

 <?php
    $email_text = array(var_export($_POST, true));

    $array = "";

    foreach ($email_text as $key => $value) {
        $array .=  $value;
    }
    unset($key);
    unset($value);
    $body="";
    foreach ($array as $key => $value) {
        if($key!="Patients"){
            $body .=  "$key: $value</br>";
        }
        if($key=="Patients"amp;amp;$key!=NULL) {
            $body.="$key</br>";
            foreach ($array[$key] as $id => $datas) {
                $body.="$id</br>";
                //var_dump($arrays[$key][$id]);
                foreach ($array[$key][$id] as $data => $dvalue) {
                    $body.="$data: $dvalue</br>";
                }
            }
        }
    }
    echo $body;
?>
  

Ответ №2:

Я написал класс, который даст вам желаемый результат:

 <?php

class EmailGenerator {
    const EMAIL_FIELD = 'email';
    const PHONE_FIELD = 'phone';
    const PATIENTS_FIELD = 'Patients';

    const NAME_FIELD = 'name';
    const LASTNAME_FIELD = 'lastname';
    const MEDICATION_STR = 'medication_str';

    const P_TAG_OPEN_TAG = '<p>';
    const P_TAG_CLOSE_TAG = '</p>';

    const BR_TAG = '</br>';
          
    private $inputArray;
    private $emailBody;

    public function setBody($inputArray) {
        $this->inputArray = $inputArray;
    }

    public function getHtmlBody() {
        return $this->emailBody;
    }

    public function generateHtmlBody() {
        $this->emailBody = "";
        $this->emailBody .= $this->pTag(self::EMAIL_FIELD . ": " . $this->inputArray[self::EMAIL_FIELD]);
        $this->emailBody .= $this->pTag(self::PHONE_FIELD . ": " . $this->inputArray[self::PHONE_FIELD]);
        $this->emailBody .= self::BR_TAG;
        $this->emailBody .= $this->pTag(self::PATIENTS_FIELD);
        foreach ($this->inputArray[self::PATIENTS_FIELD] as $key => $value) {
            $this->emailBody .= $this->pTag($key . " -");
            $this->emailBody .= $this->pTag(self::NAME_FIELD . ": " . $value[self::NAME_FIELD]);
            $this->emailBody .= $this->pTag(self::LASTNAME_FIELD . ": " . $value[self::LASTNAME_FIELD]);
            $this->emailBody .= $this->pTag(self::MEDICATION_STR . ": " . $value[self::MEDICATION_STR]);
            $this->emailBody .= self::BR_TAG;
        }
    }
    
    private function pTag($input) {
        return self::P_TAG_OPEN_TAG . $input . self::P_TAG_CLOSE_TAG;
    }
}

$arrayBody = array (
    'email' => 'xxx@gmail.com',
    'phone' => '123123',
    'Patients' =>
    array (
      0 =>
      array (
        'name' => 'xxx',
        'lastname' => 'xxxx',
        'medication_str' => '12312312',
      ),
      1 =>
      array (
        'name' => '123',
        'lastname' => '123',
        'medication_str' => '123',
      ),
    ),
);

$emailGenerator = new EmailGenerator;
$emailGenerator->setBody($arrayBody);
$emailGenerator->generateHtmlBody();
echo $emailGenerator->getHtmlBody();
  

И результат таков

 email: xxx@gmail.com

phone: 123123


Patients

0 -

name: xxx

lastname: xxxx

medication_str: 12312312


1 -

name: 123

lastname: 123

medication_str: 123

  

Я надеюсь, что это полезно. 🙂