2017-12-11 10 views
1

を作成:PHPの - 私はこのようになります。私は<a href="http://developer.ninjaforms.com/codex/fields/" rel="nofollow noreferrer">Ninja Forms</a>から取得したデータからJSONオブジェクトを作成しようとしていますJSONオブジェクトに

{ 
    "title": "Contact Me", 
    "fields": [ 
     { 
      "label": "Name", 
      "type": "textbox", 
      "required": "1" 
     }, 
     { 
      "label": "Email", 
      "type": "email", 
      "required": "1" 
     } 
    ] 
} 

私はこのように、そうしようとしています:

$settings = ['label', 'type', 'required']; 
$formTitle = Ninja_Forms()->form(1)->get()->get_setting('title'); 
$formFields = Ninja_Forms()->form(1)->get_fields(); 
$data = ['title' => $formTitle]; 

foreach ($formFields as $formField) { 
    $key = $formField->get_setting('key'); 

    foreach ($settings as $setting) { 
     $data['fields'][$key][][$setting] = $formField->get_setting($setting); 
    } 
} 

return $data; 

しかし、その結果は次のようになります。

{ 
    "title": "Contact Me", 
    "fields": { 
     "name": [ 
      { "label": "Name" }, 
      { "type": "textbox" }, 
      { "required": "1"} 
     ], 
     "email": [ 
      { "label": "Email" }, 
      { "type": "email" }, 
      { "required": "1" } 
     ], 

どのように次のような結果になるよう、私は、これを行うことができます私が上に示したもの?見て

foreach ($formFields as $formField) { 
    $key = $formField->get_setting('key'); 

    foreach ($settings as $setting) { 
    $object[$setting] = $formField->get_setting($setting); 
    } 
    $data['fields'][] = $object; 
} 

return $data; 

答えて

0

これは私の希望の結果を与えた:私は、結果のこの種を与えたこと、

foreach ($settings as $setting) { 
    $data['fields'][] = $formField->get_setting($setting); 
    } 

をしかし: 、私はまた、このように試してみましたこれはデータの次元を数えることです。ご希望の形式では、最も深い項目は次のとおりです。

{ "fields": [ { "label": "Name" 

ですから、object -> array -> objectを持っています。

私たちはあなたのコード内の各配列をインデントした場合、我々は持っている:

$data // outermost array 
    ['fields'] 
    [$key] 
     [] // innermost array 
      [$setting] = $value; // key in innermost array 

するか、私たちはただ一つの値でそれを宣言した場合:

だからあなたは、配列の4つのレベルがあり、

JSONと比較すると、数値キーを配列として、非数値キーを「オブジェクト」とする配列は、object -> object -> array -> objectとなります。

objectディメンションが追加されているため、削除する必要があるのは[$key]です。

しかし、我々は、いずれかの項目ごとに[]でキーをインクリメントしたくないので、私たちは事前に私たちの価値を作るためにどちらかの必要があります...

foreach ($settings as $setting) { 
    $object[$setting] = $formField->get_setting($setting); 
} 
$data['fields'][] = $object; 

...または当社のキーを選択し事前に:

$i++; 
foreach ($settings as $setting) { 
    $data['fields'][$i] = $formField->get_setting($setting); 
} 
0

一つの方法:

{ 
    "title": "Contact Me", 
    "fields": [ 
     "Name", 
     "textbox", 
     "1", 
     "Email", 
     "email", 
     "1", 
     "Message", 
     "textarea", 
     "1", 
     "Submit", 
     "submit", 
     null 
    ] 
} 
関連する問題

 関連する問題