2013-04-24 36 views
5

Tôi đang sử dụng chỉ sử dụng 1 dữ liệu để chèn vào tệp json của tôi.cách thêm mục vào mảng định dạng tệp json

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

Vì vậy, đây là cách tệp json của tôi trông như thế nào. Tôi chỉ muốn thêm 1 người chơi vào cuối.

{ 

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

     ] 
    } 
    ] 
} 

Câu hỏi của tôi là, làm cách nào để thêm trình phát vào cuối? Và tôi cũng muốn biết cách cập nhật

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

trong mảng đối sánh.

Trả lời

7

Chỉ cần giải mã chuỗi json của bạn và sau đó sử dụng mảng đẩy

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

Đối với trường hợp của bạn

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

Chỉ cần kiểm tra giá trị của print_r ($ arr); Tôi hy vọng đây là những gì bạn muốn. :)

+2

là con sẽ không này thất bại? Tôi luôn nghĩ rằng json_decode là một đối tượng không phải là mảng. Bạn có thể sử dụng đúng như một tư tưởng đối số thứ hai, để bạn có thể nhận được biểu diễn mảng kết hợp? cảm ơn cho lời giải thích :) – intelis

+1

@intelis cũng cho biết tham số thứ hai là như vậy imprtant. :) –

+0

@chandresh_cool Cảm ơn rất nhiều trả lời .. Tôi có nghi ngờ .. Tôi có thể vượt qua chỉ 1 giá trị trong một ngày, nói chỉ là tên của người chơi, và để phần còn lại .. Sẽ có vấn đề gì không ?? – user2234992

5

Thêm người chơi khác

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

Đang cập nhật phù hợp với

trận đấu đầu tiên mảng

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

trận đấu thứ hai mảng

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

hiện nay đơn giản hai mảng chiều w ith keys player1id, player2idwinner - sẽ dễ dàng cập nhật chúng. Sau đó, bạn có thể mã hóa $tempArray quay lại json.

+0

Cảm ơn bạn đã trả lời !! Điều gì nếu một số giá trị không có giá trị trong nó .. Tôi không vượt qua ở tất cả .. Hoặc tôi vượt qua với giá trị null .. Điều gì xảy ra sau đó .. – 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> 

Các vấn đề liên quan