如何从Json填充Select类型输入php

时间:2017-01-12 04:47:43

标签: php json zend-framework combobox

我正在构建一个zend框架项目,我第一次使用php,所以如果问题太愚蠢或者问题已经得到解答但是我没有找到它,那么事先提前我的apolagies。

我正在尝试使用从api获取的数据填充选择类型输入(下拉列表)。
我在Form类上的代码(扩展Zend \ Form \ Form)是这样的:

    $url = 'http://localhost:63715/api/Local';

    $jsonData = file_get_contents($url);
    $jsonDataObject = json_decode($jsonData);

    $local = new Element\Select('local');
    $local->setLabel('Local');
    $local->setAttribute('class', 'form-control');

我从API中收到的json代码是:

[{"ID": 1,"Name": "Local 1"},{"ID": 2,"Name": "Local 2"}]

我不知道如何使用我收到的数据填充$ local,我在互联网上找到的只是jquery和js。

感谢。

2 个答案:

答案 0 :(得分:0)

试试这个:

<?php

$url = 'http://localhost:63715/api/Local';

$jsonData = file_get_contents($url);
$jsonDataArray = json_decode($jsonData,true);

$options=[];
foreach ($jsonDataArray as $data){
    $options[$data['ID']] = $data['Name'];
}

$local = new Element\Select('local');
$local->setLabel('Local');
$local->setAttribute('class', 'form-control'); 
$local->setAttribute('options',$options);

答案 1 :(得分:0)

ZF风格:

<?php

namespace YourNamespace;

use Zend\Form\Element\Select;
use Zend\Http\Client;
use Zend\Json\Json;

class YourJsonSelect extends Select
{
    /**
     * @return array
     */
    public function getValueOptionsDefault()
    {
        $client = new Client('http://localhost:63715/api/Local');
        $response = $client->send();

        $array = Json::decode($response->getBody(), Json::TYPE_ARRAY);

        $options = [];
        foreach ($array as $data) {
            $options[$data['ID']] = $data['Name'];
        }
        return $options;
    }

    /**
     * @return array
     */
    public function getValueOptions()
    {
        if (!$this->valueOptions) {
            $this->valueOptions = $this->getValueOptionsDefault();
        }
        return $this->valueOptions;
    }
}
// And "voilà"
$local = new YourNamespace\YourJsonSelect('local');
$local->setLabel('Local');
$local->setAttribute('class', 'form-control');