2011-09-06 15 views
2

ネストされたPHP値オブジェクトを作成するには? (クラス)私は、次の使用して、クラスの構文を作成したいと思い

$resp = new stdclass; 

$resp->CategoryListResp->category[0]->categoryId = 1; 
$resp->CategoryListResp->category[0]->categoryName = "Spel"; 
$resp->CategoryListResp->category[0]->iconUri = "PictoSpel.png"; 

$resp->CategoryListResp->category[1]->categoryId = 2; 
$resp->CategoryListResp->category[1]->categoryName = "Transport"; 
$resp->CategoryListResp->category[1]->iconUri = "PictoTransport.png"; 

は容易では必要がありますが、私はこのための構文を見つけることができません。 後で$ respをjson形式で出力します。私はまた、このために配列を使用することができます知っています...

JSON出力はしなければならない:

{"CategoryListResp":{"category":[{"categoryId":1,"categoryName":"Spel","iconUri":"PictoSpel.png"},{"categoryId":2,"categoryName":"Transport","iconUri":"PictoTransport.png"}]}} 
+4

はい、配列を使用します。** much ** simpler ...オブジェクトを使用する場合は、まず空のオブジェクトを '$ resp-> CategoryListResp'に代入する必要があります。 $ resp'など... –

+0

問題が発生していますか?そのコードはそのまま動作するはずです。 – webbiedave

+0

コードは正常に動作しますが、より明示的なクラスを作成する方法を知りたいと思います。上のjsonは単純な の 'print json_encode($ resp); 'で出力されます。 –

答えて

2

また、あなたのクラスがより明確にすることができます(henqさんのコメントに基づいて)

class Category { 
     public $categoryId = 0, $categoryName = '', $iconUri = ''; 
    } 

    class Resp { 
     public $categoryListResp = null; 
     public function __construct() { 
      $this->categoryListResp = new CategoryListResp(); 
     } 
    } 

    class CategoryListResp { 
     public $category = array(); 
    } 

    $resp = new Resp(); 
    $resp->categoryListResp->category[0]->categoryId = 1; 
    $resp->categoryListResp->category[0]->categoryName = "Spel"; 
    $resp->categoryListResp->category[0]->iconUri = "PictoSpel.png"; 
    // etc. 

追加しました。クラス概念を完全に利用するには、クラスにいくつかのメソッドを追加する必要があります。次に、配列には->を使用しませんが、それぞれのメソッドを呼び出します。例えば。

class Category { 
    public $categoryId = 0, $categoryName = '', $iconUri = ''; 
    public function __construct($id, $name, $icon) { 
     $this->categoryId = $id; 
     $this->categoryName = $name; 
     $this->iconUri = $icon; 
    } 
} 

class Resp { 
    public $categoryListResp = null; 
    public function __construct() { 
     $this->categoryListResp = new CategoryListResp(); 
    } 
    public function addCategory($index, $id, $name, $icon) { 
     $this->categoryListResp->addCategory($index, $id, $name, $icon); 
    } 
} 

class CategoryListResp { 
    public $category = array(); 
    public function addCategory($index, $id, $name, $icon) { 
     $this->category[$index] = new Category($id, $name, $icon); 
    } 
} 

$resp = new Resp();   
$resp->addCategory(0, 1, "Spel", "PictoSpel.png"); 
$resp->addCategory(1, 2, "Transport", "PictoTransport.png"); 
// etc 

このコンセプトは、必要に応じて変更できます。

$resp = array(
    'CategoryListResp' => array(
    'category' => array(
     array(
     'categoryId' => 1, 
     'categoryName' => 'Spel', 
     'iconUri'  => 'PictoSpel.png' 
    ), 
     array(
     'categoryId' => 2, 
     'categoryName' => 'Transport', 
     'iconUri'  => 'PictoTransport.png' 
    ), 
    ), 
), 
); 

print json_encode($resp); 

クリーンでシンプル:

+0

これは、私が探していた行の続きです。しかし、私はあなたが明示的にクラスを定義することによってあまり得られないことを今見て取ることができます。私はちょうど "PHPの方法"であるように見える配列を使用して終了しました:) –

+0

実際に私はコンセプトを示し、あなたの ' - >'記法を維持するために半分しか行いませんでした。私はクラスの概念のフルパワーを示すために私の答えを広げました。しかし、再び、あなたのニーズに適応する必要があります – Jiri

+0

ありがとう!これは疑問であり、受け入れられたとマークされています。 –

2

あなたはすでに、ほとんどそこにいる:

$resp = new stdClass(); 
$resp->CategoryListResp = new stdClass(); 

$resp->CategoryListResp->category[0]->categoryId = 1; 
$resp->CategoryListResp->category[0]->categoryName = "Spel"; 
$resp->CategoryListResp->category[0]->iconUri = "PictoSpel.png"; 

$resp->CategoryListResp->category[1]->categoryId = 2; 
$resp->CategoryListResp->category[1]->categoryName = "Transport"; 
$resp->CategoryListResp->category[1]->iconUri = "PictoTransport.png"; 

print_r(json_encode($resp)); 

/* 
output: 
{"CategoryListResp":{"category":[{"categoryId":1,"categoryName":"Spel","iconUri":"PictoSpel.png"},{"categoryId":2,"categoryName":"Transport","iconUri":"PictoTransport.png"}]}} 
*/ 

だけjson_encode$respを送ります。しかし、あなたのコードはそのまま動作するはずです。 stdClassを使用するのではなく、CategoryListRespCategoryのクラス定義を作成する方が良い設計です。

1

配列は(@のフェリックス・クリングにより示唆されるように)これは、コードが終わった方法です

行くための簡単な方法です。

関連する問題