是否可以从PHP中的字符串创建变量?

时间:2019-07-19 14:52:54

标签: php string laravel

我需要将电子邮件Content-Type: text/plain; charset="UTF-8"的内容转换为变量并将其存储在数据库中,以便可以检索它们并将其输出到表/图形中。 我正在使用Laravel。

我正在将Laravel5.8与https://github.com/Webklex/laravel-imap一起使用来处理主题/收件人在数据库中的存储。

因此,我需要能够从标题获取信息,并在变量中显示下表,例如: $location = "UNIT 1 PERCH 1"; $subLoc = "House 1, Pen 1; $age = "3 DAYS";

我已经设法将完整的电子邮件存储在数据库中,但是如果我无法操纵文本,那将毫无意义。

示例电子邮件:

        123 ADDRESS
      THE ADDRESS
  BW8010 2.55  UNIT 1

Logged   07 JUN 14 23:59

     SUMMARY REPORT

----UNIT 1  PERCH 1-----
     House 1, Pen 1

Age         DAYS       3
Total               3991
Average     GMS       61
Deviation   GMS       16
Evenness    %         22
C.V.        %       21.1
Daily gain  GMS        1

----UNIT 1  PERCH 2-----
     House 1, Pen 2

Age         DAYS       2
Total               3123
Average     GMS       74
Deviation   GMS       16
Evenness    %         12
C.V.        %         34
Daily gain  GMS        2

2 个答案:

答案 0 :(得分:0)

我还没有测试过。但是一般的想法是,您可以拥有一个数组,其中包含您希望从电子邮件中获取的所有变量名。然后阅读电子邮件,并在每行循环中查看数组是否包含所需变量的名称。如果确实如此,则将行保存到数据库。可能有多种方法可以使此过程更有效。

  <?php 

  $variableNames = array("Location", "Age"); //Array of variable names to get

  $email = fopen($fileName, "r") or die("Unable to open email"); 

  //For each line of the email
  while(!feof($email ))
  {
    $line = fget($email); //Get the current line

    for($i = 0; $i < sizeOf($variableNames); $i++){ //Loop through the variables array

      if(stristr($line, $variableNames[$i])){ //if the line contains the name of a desired variable
        //Add $line to database...
      }
    }
  }

  fclose($email );
?>

答案 1 :(得分:0)

使用regex,您可以获得locationsubLocage数据(邮件模板必须在上面)。我刚刚抢到了第一场比赛,如果您需要所有比赛,则可以使用foreach()来获取所有发生的事件,

<?php
$re = '/----(.*)-----
     (.*)

Age         (?:DAYS       (\d+))/m';
$str = ' 123 ADDRESS
      THE ADDRESS
  BW8010 2.55  UNIT 1

Logged   07 JUN 14 23:59

     SUMMARY REPORT

----UNIT 1  PERCH 1-----
     House 1, Pen 1

Age         DAYS       3
Total               3991
Average     GMS       61
Deviation   GMS       16
Evenness    %         22
C.V.        %       21.1
Daily gain  GMS        1

----UNIT 1  PERCH 2-----
     House 1, Pen 2

Age         DAYS       2
Total               3123
Average     GMS       74
Deviation   GMS       16
Evenness    %         12
C.V.        %         34
Daily gain  GMS        2';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
$keys = ['location','subLoc','age'];
$values= [$matches[0][1],$matches[0][2],$matches[0][3]];
$result = array_combine($keys,$values);
extract($result);
echo "\$location = $location; \$subLoc = $subLoc; \$c = $subLoc;";
?>

输出:

$location = UNIT 1  PERCH 1; $subLoc = House 1, Pen 1; $c = 3;

工作演示: https://3v4l.org/HiEqI