2017-01-04 10 views
2

配列[ 'accountType']:

$setting['accountType']['all'] = 'ALL'; 
$setting['accountType']['A1'] = 'VIP1'; 
$setting['accountType']['A2'] = 'VIP2'; 

PHPコードオブジェクトを生成する:

$object = new stdClass(); 
    $myArray = array(); 
    foreach ($setting['accountType'] as $key => $val) 
    {      
     $object->id = $key; 
     $object->desc = $val; 
     $myArray[] = $object;  
    } 
    $accountType = $myArray; 

JSONにオブジェクトをフォーマットするPHPコード:

json_encode(['accountType'=> [(object)$accountType])); 

ただし、出力は次のようになります。

"accountType": [{ 
    "0": { 
     "id": "A2", 
     "desc": "VIP" 
    }, 
    "1": { 
     "id": "A2", 
     "desc": "VIP" 
    }, 
    "2": { 
     "id": "A2", 
     "desc": "VIP" 
    } 
}] 

問題1:ループバックするときに$ accountTypeが最後のオブジェクトのみを保持するのはなぜですか?

問題2:$ accountTypeの配列のキーなしこれは私が達成しようとしているものです

[array_values($ accountType)を使用することによって解決]:

"accountType": [{ 
     "id": "all", 
     "desc": "All " 
    }, { 
     "id": "A1", 
     "desc": "Normal" 
    }, { 
     "id": "A2", 
     "desc": "VIP" 
    }] 

上記のように出力を得るには?

+0

のですか? –

+0

$ setting ['accountType']を印刷できますか? – rahulsm

+0

'json_encode(['accountType' => $ accountType]); ' – bansi

答えて

1

あなたはあなたのコードで

json_encode(['accountType'=> $accountType]); 

代わりの

json_encode(['accountType'=> [(object)$accountType]]); 

を使用する必要があり、あなたがその結果ここ

を得ている理由である別の配列内$accountTypeを入れているがDemo and Explanation

です

編集:コード全体

$setting['accountType']['all'] = 'ALL'; 
$setting['accountType']['A1'] = 'VIP1'; 
$setting['accountType']['A2'] = 'VIP2'; 

$myArray = array(); 
foreach ($setting['accountType'] as $key => $val) 
{      
    $object = new stdClass(); // Note: $object should be created inside the loop 
    $object->id = $key; 
    $object->desc = $val; 
    $myArray[] = $object;  
} 
$accountType = $myArray; 
echo json_encode(['accountType'=> $accountType]); 

そして、ここではそれが `stdClass`の対象にしたくないのはなぜRevised Demo

+0

$ setting ['accountType']をループして$ dealStatusに代入すると、なぜ繰り返し値が得られますか? –

+0

デモではどういう意味ですか?そこに日付はサンプルのためのものであり、より多くのデータを持つために3回繰り返されています。生成するループは 'json_encode(['accountType' => $ dealStatus]);'を使うだけで問題ありません。 – bansi

+0

私はデモを修正して、あなたはそれが{"id": "A1"、 "desc": "VIP1"}と最初のオブジェクト{"id": "A2"、 "desc" VIP "}が$ accountTypeにありません –

1

echo json_encode(array_values($your_array)); 

そのが

+0

@V Vendetta okのために、これは私が探している答えの一部です... thx –

+0

あなたは大歓迎です! – rahulsm

0

を働いた場合、私に教えてください。これは、いや、まったく同じことですか、これを試してみてください 特定のjsonオブジェクトにアクセスするために必要なため、小数点が表示されます。 あなたは配列を持っており、そのキーによって各要素にアクセスすることができます。