如何用PHP对这些数据进行json编码?

如何用PHP对这些数据进行json编码?,php,javascript,json,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格式发送此数据 我

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

$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函数,当我需要发回单个对象时,我可以使用它,但在这种情况下,我认为我需要发回多个对象,每个下拉选项一个对象。所以不知道该怎么做,因为它都在一个循环中。

您可以不使用json进行编码,如下所示

$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-in循环将其转换回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,那么就可以在数组中循环。否则,您必须对其进行解析/求值,然后在其中循环

您可以使用更少的空间,如下所示:

$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>';
}
然后,您将按如下方式使用:

$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>';
}

您不需要对象强制转换。json_encode将使关联数组自动成为json对象php中的使用者是什么?这个问题显然有javascript这个消费者这个问题没有提到javascript,但是现在你提到它,这就更有意义了。将JS添加到我的答案中。如果您的web主机尚未升级到PHP51和PHP51。他们最近确实增加了升级到5的功能,但我已经习惯了这样做myself@RobotWoods. 您可以找到为PHP4提供回退功能的现有库。看见