使用 Laravel 8 循环以 gamma 分隔的变量

Loop on a variable delimited with gamma using Laravel 8

我的数据库中有以下形式的值:

["email1@gmail.com","email2@gmail.com"]

我正在使用 laravel,我想循环此变量以获取每个元素,例如获取元素:email1@gmail.com.

我尝试了以下代码:

我有以下数组:

$emails :
    array:2 [▼
      0 => "["email1@gmail.com","email2@gmail.com"]"
      1 => "["email3@gmail.com","email4@gmail.com"]"
    ]

所以我使用以下代码获取每个元素:

$var = array();
          foreach ($emails as $key => $value) {
            $var[] = $value;
          }

我得到以下结果:

array:2 [▼
  0 => "["email1@gmail.com","email2@gmail.com"]"
  1 => "["email3@gmail.com","email4@gmail.com"]"
]

有什么想法请帮忙

更新

我有以下数组:

array:2 [▼
  0 => "["email1@gmail.com","email2@gmail.com"]"
  1 => "["hajar.boualamia33@gmail.com","guernine.khadija@gmail.com"]"
]

我做了以下方法:

$emailss = collect($emails)->flatten()->all();
 dd($emailss);

我得到以下结果:

array:2 [▼
  0 => "["email1@gmail.com","email2@gmail.com"]"
  1 => "["hajar.boualamia33@gmail.com","guernine.khadija@gmail.com"]"
]

更新

哈,棘手的一个。您似乎存储了一个 PHP 表达式(一个数组)。所以为了提取数组,我们需要先评估它们。

试试这个:

$elements = [
  "['email1@gmail.com','email2@gmail.com']",
  "['email3@gmail.com','email4@gmail.com']",
];

$emails = collect($elements)
  ->map(function ($element) {
    return (eval("return $element = " . $element . ';'));
  })
  ->flatten()
  ->all();

试试这个:


$elements = [
  ['email1@gmail.com','email2@gmail.com'],
  ['email3@gmail.com','email4@gmail.com'],
];

$emails = collect($elements)->flatten()->all();

这会让你:

=> [
     "email1@gmail.com",
     "email2@gmail.com",
     "email3@gmail.com",
     "email4@gmail.com",
   ]

检查此方法on the docs