如何用PHP在json中编码这些数据?

时间:2011-10-27 01:08:17

标签: php javascript json

我的控制器中有以下代码:

$regions = $this->signup_m->get_regions($country_id);
foreach ($regions as $key => $region) {
     echo "<option value='$key'>$region</option>";
}

它是由ajax请求调用的。而不是在控制器中构建html我宁愿返回一个json对象,我可以从中构建下拉选项。如何以json格式发送此数据?

我读到了PHP的json_encode函数,当我需要发回一个对象时,我能够使用它,但在这种情况下,我认为我需要发回多个对象(每个下拉选项一个)。所以不确定如何去做,因为它都在循环中。

3 个答案:

答案 0 :(得分:1)

在php中:

$regions = $this->signup_m->get_regions($country_id);
$jsonObj = array();
foreach ($regions as $key => $region) {
    $jsonObj[] = (object) array('value'=>$key, 'test'=>$region);
}
echo json_encode($jsonObj);

在javascript中你会收到一个json对象。如果您使用的是jquery,那么您只需要遍历数组即可。否则你将需要解析/评估它然后循环它

答案 1 :(得分:0)

您可以使用更少的空间来执行此操作:

$keysRegionsJSON = json_encode($this->signup_m->get_regions($country_id));

然后你会按如下方式使用它:

$keysRegions = json_decode($keysRegionsJSON);
foreach ($keysRegions as $key => $region) {
    echo '<option value="' . $key . '">' . $region . '</option>';
}

普通JS中的同样的事情:

for (key in keysRegionsJS) {
    document.write('<option value="' + key + '"> + keysRegionsJS[key] + '</option>';
}

答案 2 :(得分:-1)

您可以在没有json_encode的情况下执行此操作

$json="{";
$count=0;
$regions = $this->signup_m->get_regions($country_id);
foreach ($regions as $key => $region) {
    if($count>0){$json.=",";}
    $json.="\"".$key."\":\"".$region."\"";
    $count++;
}
$json.="}";
echo $json;

然后你将在你的javascript中使用for循环将其转回选项