2013-04-24 13 views
5

Sto usando utilizzando solo 1 dati da inserire nel mio file json.come aggiungere elementi all'array json file formattato

$data=$_POST['myusernamer']; 

$inp = file_get_contents('7players.json'); 
$tempArray = json_decode($inp); 
array_push($tempArray, $data); 
$jsonData = json_encode($tempArray); 
file_put_contents('7players.json', $jsonData); 

Ecco come appare il mio file JSON. Voglio solo aggiungere 1 giocatore alla fine.

{ 

"players":[ 
    { 

     "name":"Moldova", 
     "image":"/Images/Moldova.jpg", 
     "roll_over_image":"tank.jpg" 
    }, 
    { 

     "name":"Georgia", 
     "image":"/Images/georgia.gif", 
     "roll_over_image":"tank.jpg" 
    }, 
    { 

     "name":"Belarus", 
     "image":"/Images/Belarus.gif", 
     "roll_over_image":"tank.jpg" 
    }, 
    { 

     "name":"Armenia", 
     "image":"/Images/armenia.png", 
     "roll_over_image":"tank.jpg" 
    }, 
    { 

     "name":"Kazahstan", 
     "image":"/Images/kazahstan.gif", 
     "roll_over_image":"tank.jpg" 
    }, 
    { 

     "name":"Russia", 
     "image":"/Images/russia.gif", 
     "roll_over_image":"tank.jpg" 
    }, 
    ], 


"games" : [ 

    { 

    "matches" : [ 

      { 

      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":7, 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      } 
     ] 
     }, 

    { 

    "matches" : [ 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":7, 
      "winner":"*" 
      }, 
      {   
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

     ] 
    } 
    ] 
} 

La mia domanda è, come si aggiunge il giocatore alla fine? E mi piacerebbe anche sapere come aggiornare

player1id":"*", 
"player2id":"*", 
"winner":" 

nella matrice di corrispondenza.

risposta

7

Basta decodificare la stringa JSON e poi usare array di spinta

$tempArray = json_decode($jsonstring, true); 
array_push($tempArray, $your_data); 

Per il vostro caso

$str = '{ 

"players":[ 
    { 

     "name":"Moldova", 
     "image":"/Images/Moldova.jpg", 
     "roll_over_image":"tank.jpg" 
    }, 
    { 

     "name":"Georgia", 
     "image":"/Images/georgia.gif", 
     "roll_over_image":"tank.jpg" 
    } ]}'; 


$arr = json_decode($str, true); 
$arrne['name'] = "dsds"; 
array_push($arr['players'], $arrne); 
print_r($arr); 

Basta controllare il valore di print_r ($ arr); Spero che questo sia quello che vuoi. :)

+2

non è questa intenzione di fallire? Ho sempre pensato che json_decode fosse una rappresentazione di un oggetto non una matrice. Potresti usare true come pensiero di secondo argomento, in modo da ottenere la rappresentazione di un array associativo? grazie per la spiegazione :) – intelis

+1

@intelis ha detto bene che il secondo parametro è così importante. :) –

+0

@chandresh_cool Grazie molte risposte .. Ho dei dubbi .. Posso passare solo 1 valore in un araay, dire solo il nome del giocatore, e lasciare il resto..Ci farebbe qualche problema ?? – user2234992

5

aggiunta di un altro giocatore

$tempArray = json_decode($inp, true); 
array_push($tempArray['players'], array('name' => $data['username'], 'image' => $data['userimage'], 'roll_over_image' => 'tank.jpg')); 

Aggiornamento corrisponde

prima corrispondenza matrice

$tempArray['games'][0]['matches']; 

seconda partita matrice

$tempArray['games'][1]['matches']; 

sono ora semplici due matrici bidimensionali w Con i tasti player1id, player2id e winner - dovrebbe essere facile aggiornarli. Quindi è possibile codificare lo $tempArray in JSON.

+0

Grazie per aver risposto !! Cosa succede se alcuni valori non hanno valori in esso .. Io non passo affatto..Oppure passo con valori null..Cosa succede allora .. – user2234992

2
<html> 
<head> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js" ></script> 
</head> 
<body> 
    <?php 
     //first copy your json data data.json 
     $str = file_get_contents('data.json');//get contents of your json file and store it in a string,bro small suggestion never keep any JSON data in ur html file its not safe.always keep json data in external file. 
     $arr = json_decode($str, true);//decode it 
     $arrne['players'] = "sadaadad"; 
     $arrne['image'] = "sadaadad"; 
     $arrne['roll_over_image'] = "sadaadad"; 
     array_push($arr['employees'], $arrne);//push contents to ur decoded array i.e $arr 
     $str = json_encode($arr); 
     //now send evrything to ur data.json file using folowing code 
     if (json_decode($str) != null) 
      { 
      $file = fopen('data.json','w'); 
      fwrite($file, $str); 
      fclose($file); 
      } 
      else 
      { 
      // invalid JSON, handle the error 
      } 

     ?> 
</body> 

Problemi correlati