循环遍历带有对象的数组

时间:2015-06-03 11:59:53

标签: javascript php angularjs

我从后端得到以下数组:

[Object { 7="77.105.239.8", 10="77.105.239.11", 18="77.105.239.19", more...}]

如何使用ng-options用数组中的Ips填充我的选择下拉列表?

上面的数组是我后端的array_diff的结果在PHP中:

foreach($ips as $ip)
                {
                    $taken[] = $ip['ip'];
                }

                $start = (ip2long($serie->net) + 1);
                $antal = pow(2,(32-$serie->mask));

                for($i = $start; $i < ($start+$antal-3); $i++)
                {
                    if(end(explode(".", long2ip($i))) != "0")
                    {
                        $possible_ips[] = long2ip($i);
                    }
                }

                $poss = array_diff($possible_ips, $taken);

                return $poss;

3 个答案:

答案 0 :(得分:0)

实际上你得到一个只有一个字段的数组,其中包含一个包含你需要的数据的对象。 我的建议是,在后端解决这个问题。这样你就得到了你需要的东西 - &gt;一个真正的阵列。像这样:

[
     { "id":7, "ip":"77.105.239.8"},
     { "id":10, "ip":"77.105.239.150"}, 
     { "id":12, "ip":"77.105.239.12"}
]

由于array_diff返回一个assoziative数组,我们需要将它转换为非assoziative数组并返回它(使用json_encode或不使用,具体取决于你的设置):

...
$poss = array_diff($possible_ips, $taken);
$res = [];
foreach ($poss as $key => $value) {
    $res[] = $value;
}
return json_encode($res);

答案 1 :(得分:0)

如果您不想或无法修复要格式化的数据,如m4lt3 answer,那么您需要在尝试绑定数据之前对数据进行一些预处理。

var originalData = [{ 7: "77.105.239.8", 10: "77.105.239.11", 18: "77.105.239.19"}];
var originalObject = originalData[0];
var newData = [];
for (var i in originalObject) {
  newData.push({'id': i, 'ip': originalObject[i]});
}
$scope.ipList = newData;

...然后你可以使用ngOptions绑定ipList。

答案 2 :(得分:0)

我认为你可以按原样保留你的功能,除了将return语句更改为:return json_encode($poss);