2016-04-13 16 views
1

PHPを使用してjsonファイルに配列を追加しようとしています。私はそれが(フォーマットは関係ありません)を見てみたいどのようキー配列/インデックス指定のjsonへのPHP配列

私の結果は、実際にどのように見えるか
{ 
    // Already stored in json file 
    "swagg_ma_blue":{ 
     "user":"swagg_ma_blue", 
     "admin":true, 
     "user_id":"000" 
    }, 
    // Should be added using php 
    "dnl":{ 
     "user":"dnl", 
     "admin":"true", 
     "user_id":"000" 
    } 
} 

:あなたが第二の要素の配列インデックス/キーを参照してくださいとして

{"swagg_ma_blue":{"user":"swagg_ma_blue","admin":true,"user_id":"000"},"0":{"user":"d4ne","admin":true,"user_id":"000"}} 

"0"と呼ばれますが、userという値が必要です。

マイコード:

<?php 
    class add_mod_class { 
     function __construct($username, $status){ 
      $this->username = $username; 
      $this->status = $status; 
      $this->user_id = '000'; 
      $this->json_file = 'includes/json/mods.json'; 
     } 

     function get_json(){ 
      $json_content = file_get_contents($this->json_file); 
      $json = json_decode($json_content, true); 
      return $json; 
     } 

     function mod_handler(){ 
      if($this->status == 'admin'){ 
       return true; 
      }else{ 
       return false; 
      } 
     } 

     function add_mod(){ 
      $mods = $this->get_json(); 

      $data = array(
       'user' => $this->username, 
       'admin' => $this->mod_handler(), 
       'user_id' => $this->user_id 
      ); 

      array_push($mods, $data); 

      $new_json_string = json_encode($mods); 
      return $new_json_string; 
     } 
    } 
?> 

まずアイデアが使用することでしたでした:

$data[$this->username] = array(
    'user' => $this->username, 
    'admin' => $this->mod_handler(), 
    'user_id' => $this->user_id 
); 

しかし、これはまだそれに"0":を返します。私はあらゆる種類の助けに感謝します。

+0

あなたの最初のアイデアが正しいと思われます。もちろん、 'array_push()'がなければ。どのようにしてこのメ​​ソッドを呼び出して結果を使用していますか? – jeroen

+0

私は 'json_encode'を再作成するために' array_push() 'を悲しいことに使用しなければなりません。これが行われると、 'file_put_contents()'を使ってjsonコードをファイルに保存し、メソッドを以下のフォーマットで呼び出すことができます: 'if(!empty($ _ POST)){require_once( 'includes/add_mod_class.php '); $ mod_user = $ _POST ['user']; $ mod_status = $ _POST ['ステータス']; $ mod_add =新しいadd_mod_class($ mod_user、$ mod_status); $オブジェクト= $ mod_add-> add_mod(); } ' – d4ne4thelulz

+0

' array_push'配列の最後に数値インデックスを持つ要素を追加します。 'array_push($ mods、$ data)'の代わりに '$ modes [$ this-> username] = $ data'を使ってください。 –

答えて

1

$dataの代わりに$modsの配列に割り当てる必要がある場合を除き、最初の方法は問題ありませんでした。

function add_mod(){ 
    $mods = $this->get_json(); 

    $mods[$this->username] = array(
     'user' => $this->username, 
     'admin' => $this->mod_handler(), 
     'user_id' => $this->user_id 
    ); 

    $new_json_string = json_encode($mods); 
    return $new_json_string; 
} 
+0

ありがとうございます!正常に動作します。 – d4ne4thelulz