从PHP数组创建自定义JSON字符串
我有一个PHP数组,其输出如下:从PHP数组创建自定义JSON字符串,php,arrays,json,email,Php,Arrays,Json,Email,我有一个PHP数组,其输出如下: Array ( [0] => email@email.com [1] => email@email.com [2] => email@email.com [3] => email@email.com [4] => email@email.com [5] => email@email.com ) 此数组包含电子邮件地址列表,我需要将其输出为自定义JSON字符串,该字符串与以下内容匹配: { "email@email.com":
Array ( [0] => email@email.com [1] => email@email.com [2] => email@email.com [3] => email@email.com [4] => email@email.com [5] => email@email.com )
此数组包含电子邮件地址列表,我需要将其输出为自定义JSON字符串,该字符串与以下内容匹配:
{ "email@email.com": {"id":1}, "email@email.com": {"id": 2}, "email@email.com": {"id": 3}, "email@email.com": {"id": 4}, "email@email.com": {"id": 5}, "email@email.com": {"id": 6} }
有人能给我指出正确的方向吗?我尝试过使用json\u encode
,但没有成功。只需翻转数组即可
$arr = Array ( 'email1@email.com', 'email2@email.com', 'email3@email.com');
$json = [];
foreach ($arr as $k =>$v) {
$json[$v]['id'] = $k+1;
}
echo json_encode($json); // {"email1@email.com":{"id":1},"email2@email.com":{"id":2},"email3@email.com":{"id":3}}
只需翻转阵列
$arr = Array ( 'email1@email.com', 'email2@email.com', 'email3@email.com');
$json = [];
foreach ($arr as $k =>$v) {
$json[$v]['id'] = $k+1;
}
echo json_encode($json); // {"email1@email.com":{"id":1},"email2@email.com":{"id":2},"email3@email.com":{"id":3}}
您应该从修改数组开始。 据我所知,电子邮件地址应该成为密钥,原始密钥应该增加1,并设置为“id”的值 请注意由于电子邮件被设置为密钥,如果您有重复的电子邮件地址,最后一个将覆盖第一个出现的电子邮件地址
$emails = array(
0 => 'email1@email.com', //key => email
1 => 'email2@email.com',
2 => 'email3@email.com'
);
$new_emails = array();
foreach($emails as $key => $email){
$new_emails[ $email ]['id'] = $key+1;
}
var_dump($new_emails);
/*
Output:
array(3) {
["email@email.com"]=>
array(1) {
["id"]=>
int(1)
}
["email2@email.com"]=>
array(1) {
["id"]=>
int(2)
}
["email3@email.com"]=>
array(1) {
["id"]=>
int(3)
}
}
*/
echo json_encode($new_emails);
/*
Output:
{"email@email.com":{"id":1},"email2@email.com":{"id":2},"email3@email.com":{"id":3}}
*/
您应该从修改数组开始。 据我所知,电子邮件地址应该成为密钥,原始密钥应该增加1,并设置为“id”的值 请注意由于电子邮件被设置为密钥,如果您有重复的电子邮件地址,最后一个将覆盖第一个出现的电子邮件地址
$emails = array(
0 => 'email1@email.com', //key => email
1 => 'email2@email.com',
2 => 'email3@email.com'
);
$new_emails = array();
foreach($emails as $key => $email){
$new_emails[ $email ]['id'] = $key+1;
}
var_dump($new_emails);
/*
Output:
array(3) {
["email@email.com"]=>
array(1) {
["id"]=>
int(1)
}
["email2@email.com"]=>
array(1) {
["id"]=>
int(2)
}
["email3@email.com"]=>
array(1) {
["id"]=>
int(3)
}
}
*/
echo json_encode($new_emails);
/*
Output:
{"email@email.com":{"id":1},"email2@email.com":{"id":2},"email3@email.com":{"id":3}}
*/
更新您的示例代码。如果您希望接收具有多个同名“属性”的对象的JSON代码email@email.com答案是:这是不可能的 因为在JSON中:
{ "email@email.com": {"id":1}, "email@email.com": {"id": 2}, "email@email.com": {"id": 3}, "email@email.com": {"id": 4}, "email@email.com": {"id": 5}, "email@email.com": {"id": 6} }
等于(使用Chrome的JavaScript):
更新您的示例代码。如果您希望接收具有多个同名“属性”的对象的JSON代码email@email.com答案是:这是不可能的 因为在JSON中:
{ "email@email.com": {"id":1}, "email@email.com": {"id": 2}, "email@email.com": {"id": 3}, "email@email.com": {"id": 4}, "email@email.com": {"id": 5}, "email@email.com": {"id": 6} }
等于(使用Chrome的JavaScript):
你可以这样做
<?php
$a = Array("email@email.com","email@email.com","email@email.com");
$arr = array();
$i = 0;
foreach($a as $single){
$arr[][$single]['id'] = $i;
$i++;
}
print_r(json_encode($arr));
?>
演示在这里,您可以这样做
<?php
$a = Array("email@email.com","email@email.com","email@email.com");
$arr = array();
$i = 0;
foreach($a as $single){
$arr[][$single]['id'] = $i;
$i++;
}
print_r(json_encode($arr));
?>
演示在这里,此处id仅表示数组的键对吗???您自定义的json字符串使用与键相同的电子邮件,因此它无法从带有
json\u encode
的数组生成,因此您需要编写代码来生成字符串。这是无效的,因为json或PHP中都不允许有重复的键。你能确认你所有的电子邮件都会不同吗?@Kaddath是的,电子邮件地址都会不同,我只是不想在这里发布。“我尝试过使用json_encode,但没有成功。”——效果很好,做得很好。但它不能发挥神奇的作用,也不会改变传递给编码的数据的结构。JSON只是一些数据的文本表示,而不是数据类型本身。在编码之前,您必须自己创建数据结构。如果您不知道它应该是什么样子,请使用(第二个参数为TRUE
)对所需的输出进行解码。这里id仅表示数组的键对吗???您自定义的json字符串使用与键相同的电子邮件,因此它不能从带有json\u encode
的数组生成,因此,您需要编写代码来生成字符串。这是无效的,因为JSON或PHP中都不允许有重复的键。你能确认你所有的电子邮件都会不同吗?@Kaddath是的,电子邮件地址都会不同,我只是不想在这里发布。“我尝试过使用json_encode,但没有成功。”——效果很好,做得很好。但它不能发挥神奇的作用,也不会改变传递给编码的数据的结构。JSON只是一些数据的文本表示,而不是数据类型本身。在编码之前,您必须自己创建数据结构。如果您不知道它应该是什么样子,请使用(第二个参数为TRUE
)解码所需的输出。(应作为注释提及)抱歉,我没有足够的分数向非我的帖子添加注释:((应作为注释提及)抱歉,我没有足够的分数向非我的帖子添加注释:(测试成功,如果对你有效,请更新我。测试成功,如果对你有效,请更新我。)。