2013-04-24 7 views
5

öğeye nasıl eklenir Json dosyama eklemek için sadece 1 veri kullanarak kullanıyorum.json dosyası biçimlendirilmiş dizi

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

Bu yüzden json dosyam böyle görünüyor. Sonunda sadece 1 oyuncu eklemek istiyorum.

{ 

"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":"*" 
      }, 

     ] 
    } 
    ] 
} 

Sorum şu: Oyuncunun sonuna nasıl ekleyebilirim? Ayrıca eşleme dizisinde

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

'un nasıl güncelleneceğini bilmek isterim.

cevap

7

Sadece json dize şifresini çözmek ve daha sonra

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

Sadece print_r ($ arr) değerini kontrol davanız için dizi itmek

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

kullanın; Umarım istediğin budur. :)

+2

Bu ne başarısız değil mi? Ben json_decode bir dizi değil bir nesne temsili olduğunu düşündüm. Doğruyu ikinci bir argüman olarak kullanabilirdiniz, böylece ilişkilendirici dizi temsili elde edersiniz? Açıklama için teşekkürler :) – intelis

+1

@intelis iyi ikinci parametrenin çok etkileyici olduğunu söyledi. :) –

+0

@chandresh_cool Çok cevap verdiğim .. Şüphem var .. Bir aradayken sadece 1 değeri geçebilirim, sadece oyuncunun ismini söyleyin ve gerisini bırakın .. Bu herhangi bir sorun yaratır mı? – user2234992

5

başka bir oyuncu ekleme

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

Güncelleniyor maçları

ilk maçı dizisi

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

ikinci maç dizi

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

w şimdi basit iki boyutlu dizilerdir player1id, player2id ve winner numaralı anahtarlar - bunların güncellenmesi kolay olmalıdır. Bundan sonra $tempArray kodlamasını json'a dönüştürebilirsiniz.

+0

Yanıtladığınız için teşekkürler! Ya bazı değerler onun içinde hiçbir değer yoksa .. Ben hiç geçmiyorum ... Ya da boş değerlerle geçiyorum .. O zaman ne olur? – 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>