如何使用PHP将单个数组项推入另一个数组?

4

我有一个post调用,以两种方式之一返回JSON:

$json1 = '{"found":1,"email":"email1@domain.com","error":"","rd":"email2@domain.com"}';
$json2 = '{"found":1,"email":"email1@domain.com,email2@domain.com","error":"","rd":"email3@domain.com,email4@domain.com"}';

在第一个参数中,emailrd 只有一个电子邮件地址。在第二个参数中,这两个参数都有多个收件人。
我需要从每个参数中获取电子邮件并将其添加到已经存在的数组中:
$recipients = array('support@domain.com');

使用以下代码,我可以让它与$json1变量一起工作:

array_push($recipients, $obj->{'rd'}, $obj->{'email'});

第二个JSON选项较少使用,但我仍需要相同的代码适用于两种情况。目前,如果我使用上述代码处理第二个JSON数据,则会返回以下内容:
Array
(
    [0] => support@sculpturehospitality.com
    [1] => email3@domain.com,email4@domain.com
    [2] => email1@domain.com,email2@domain.com
)

这个问题是在同一参数中有多封电子邮件的情况。有人知道怎么将每个数组项内的电子邮件分开吗?

这里有一个可行的示例:

http://sandbox.onlinephpfunctions.com/code/24c4a1eaea98566b65cd36e221dd1f185e820ea6


1
按照逗号分隔符拆分项目 - u_mulder
只是一句旁注。我个人更喜欢这样设置 assoc flag = true,即 json_decode($json_string, TRUE);,这样你的对象就会被转换为数组,你可以使用 $obj['email'] 这样的语法来操作,而不是 $obj->{'email'} - MonkeyZeus
2个回答

5

只需使用逗号将您的属性explode()并添加到数组中,例如:

$recipients = array_merge($recipients, explode(",", $obj->rd)
                                     , explode(",", $obj->email) /*,  ... */);

请注意,我现在使用array_merge()代替array_push(),因为您现在不再有单个值,而是一个包含新元素的数组:

array_push():

//单个值
$array = ["第一个元素"];
$singleValue = "第二个元素";
array_push($array, $singleValue);

输出:

Array( [0] => 第一个元素 [1] => 第二个元素)
//数组
$array = ["第一个元素"];
$secondArray= ["第二个元素", "第三个元素"];
array_push($array, $secondArray);

输出:

Array( [0] => 第一个元素 [1] => Array( [0] => 第二个元素 [1] => 第三个元素))

array_merge():

//单个值
$array = ["第一个元素"];
$singleValue = "第二个元素";

$array = array_merge($array, $singleValue);

输出:

警告:array_merge():参数#2不是数组

//数组
$array = ["第一个元素"];
$secondArray= ["第二个元素", "第三个元素"];

$array = array_merge($array, $secondArray);

输出:

Array([0] => 第一个元素 [1] => 第二个元素 [2] => 第三个元素

非常感谢!我确实尝试了exploding,但是我最终使用的是array_push,这对我来说没有用!我会在可以的时候接受这个答案! - Tom Nolan
1
@TomNolan 我更新了我的答案,并提供了一个示例,展示了单个值/数组和 array_push() / array_merge() 的操作结果。 - Rizier123

1
使用PHP的函数explode()。

http://php.net/manual/en/function.explode.php

$emailPieces = explode(",", [string_with_multiple_emails]);

$emailPieces将包含一个数组,其中包含在rd字符串中提供的每个电子邮件地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接