J'ai un tableau PHP qui produit comme suit:

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 )

Ce tableau contient une liste d'adresses e-mail, que je dois générer sous forme de chaîne JSON personnalisée, qui correspond à ce qui suit:

{ "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} }

Quelqu'un est-il capable de m'indiquer la bonne direction? J'ai essayé d'utiliser json_encode, sans succès.

0
ccdavies 16 nov. 2017 à 13:13

4 réponses

Meilleure réponse

Il suffit de retourner le tableau

$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
splash58 16 nov. 2017 à 10:18

Vous pouvez faire comme ça,

<?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)); 
 ?>

La démo est là, Démo

0
Rits 16 nov. 2017 à 10:22

Mettez à jour votre exemple de code. Si vous prévoyez de recevoir le code JSON de l'objet qui a plus d'un «attribut» avec le même nom «email@email.com», la réponse est: ce n'est pas possible!

Parce qu'en 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} }

Est égal à (en utilisant le JavaScript de Chrome):

{"email@email.com":{"id":6}}
0
JerzySBG 16 nov. 2017 à 10:19

Vous devriez commencer par modifier votre tableau. Autant que j'ai compris, l'adresse e-mail doit devenir la clé, la clé d'origine doit être augmentée de un et être définie comme valeur pour un "id".

Veuillez noter que, puisque l'e-mail est défini comme clé, si vous avez dupliqué une adresse e-mail, la dernière remplace la première occurrence.

$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
Ofir Baruch 16 nov. 2017 à 10:19
47326909