Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP数组创建自定义JSON字符串_Php_Arrays_Json_Email - Fatal编程技术网

从PHP数组创建自定义JSON字符串

从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":

我有一个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": {"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
)解码所需的输出。(应作为注释提及)抱歉,我没有足够的分数向非我的帖子添加注释:((应作为注释提及)抱歉,我没有足够的分数向非我的帖子添加注释:(测试成功,如果对你有效,请更新我。测试成功,如果对你有效,请更新我。)。