2017-02-15 6 views
-2

У меня есть строка вроде этого: «[email protected]; ABC, xyz @ gmail.com; XYZ», и я хочу преобразовать в массив boject. Как я могу это сделать? Ниже приведен примерразделите строку на объект массива в php

$noactivity_noassignedto = "[email protected];ABC,[email protected];XYZ"; 
$assignedto = explode(';', $noactivity_noassignedto); 
$assignedto = array((object) array("Email" => $assignedto[0], "Name" => $assignedto[1])); 
$fromadd = '[email protected]'; 
$fromname = 'somename'; 
/*sending mail here*/ 
$this->init()->setsubject($sub)->addto($assignedto)->setfrom($fromadd, $fromname)->send(); 
+1

Что не так с тем, что у вас есть? – AbraCadaver

+0

невозможно разбить строку $ noactivity_noassignedto на основе; (символ) необходимо передать переменную в addto() –

+1

Какое нужное содержимое присвоено $? –

ответ

1

Попробуйте этот код:

$noactivity_noassignedto = "[email protected];ABC,[email protected];XYZ"; 
$assignedto = explode(',', $noactivity_noassignedto); 

foreach ($assignedto as $recipient) { 
    $tmp = explode(';', $recipient); 
    $recipients[] = (object)array("Email" => $tmp[0], "Name" => $tmp[1]); 
} 
$recipients = (object)$recipients; 
+0

Могу ли я напрямую перейти к $ this-> init() -> setsubject ($ sub) -> addto ($ recipients) -> setfrom ($) fromadd, $ fromname) -> send(); это правильный метод –

+0

Да, но проверьте, есть ли у получателя $ структура, которую требует ваш метод 'addto()'. Я не вижу в вашем методе только то, что вы просили –

+0

'$ recipients = (object) $ recipients;' строка не нужна, ее уже в правильном формате без этой строки – RiggsFolly

0

Это создаст массив объектов, которые вы хотите

$noactivity_noassignedto = "[email protected];ABC,[email protected];XYZ"; 
$assignedto = explode(',', $noactivity_noassignedto); 

foreach($assignedto as $item) { 
    list($email, $name) = explode(';', $item); 
    $addresses[] = (object)['Name'=>$name, 'Email'=>$email]; 
} 

print_r($addresses); 

Результат: print_r($addresses);

Array 
(
    [0] => stdClass Object 
     (
      [Name] => ABC 
      [Email] => [email protected] 
     ) 

    [1] => stdClass Object 
     (
      [Name] => XYZ 
      [Email] => [email protected] 
     ) 

) 
1
$noactivity_noassignedto = "[email protected];ABC,[email protected];XYZ"; 
$elements = explode(',', $noactivity_noassignedto); 
foreach ($elements as $element) { 
    $dummy = explode(';', $element); 
    $assignedto[] = (object)array("Email" => $dummy[0], "Name" => $dummy[1]); 
} 
+0

первый правильный ответ +1 –

+0

OP хочет объект ... –

+0

Ваш не очень внимательно @Anant – RiggsFolly

-1

Вы на правильном пути. explode - это то, что вы ищете, чтобы разделить строку на массив. Учитывая

$str = "[email protected];ABC"; 
$arr = explode($str, ';'); 

$ обр будет array('[email protected]', 'ABC');.

Я думаю, что ваша проблема заключается в том, что вы хотите вызвать это несколько раз. Для этого:

$str = "[email protected];ABC,[email protected];DEF"; 
$people = explode($str, ','); 
foreach ($people as $person) { 
    $assigned_to = explode($person, ';'); 
    // rest of your code 
} 
+0

Я могу напрямую добавить $ this-> init() -> setsubject ($ sub) -> addto ($ assignto) -> setfrom ($ fromadd, $ fromname) -> send(); line в forloop после ваших коммитов –

0

Вам нужно два взрываются

$noactivity_noassignedto = "[email protected];ABC,[email protected];XYZ"; 
    $assignedAll = explode(',', $noactivity_noassignedto); 

    // here you can put loop to send all, for now just first 
    $assignedto = explode(';', $assignedAll[0]); 
    $assignedto = array((object) array("Email" => $assignedto[0], "Name" => $assignedto[1])); 
+0

Но только один набор 'name-emails 'не равен 2 – RiggsFolly

Смежные вопросы