使用ng-repeat循环遍历格式化为字符串的数组

时间:2017-01-02 22:03:55

标签: php angularjs arrays json

我最近开始将Angular添加到我制作的旧应用中。部分应用程序将json编码的数组存储在mySql表的单个单元格中。我知道这是不赞成的,但我100%肯定它以后不会再回来咬我了。在过去,我只能在数组上执行json_decode并在有序列表中输出值。由于我已经包含了Angular,因此数据被编码并在php文件的末尾进行回显。然后它被Angular代码拾取,我能够遍历这个深度嵌套的多维对象,直到它到达这个部分......

SimpleStringProperty

我能得到的最接近的是输出包含所有反斜杠,括号和引号的字符串,因为它是一个字符串。

我已尝试在sub_items的每个实例上执行json_decode,但它无法正常工作。我认为这是因为整个事情再次被编码。

我怎么能循环遍历这个数组?

修改

根据@Yaser Adel Mehraban的答案中的评论,我在以下方面取得了一些进展。

"sub_items":"[\"subOne\",\"subTwo\",\"subThree\"]"

返回

foreach($master as $index => $item) {
    if($category == $item['category']) {
        $sub = [];
        $sub['sub_items'] = json_decode($item['sub_items']);
        unset($item['sub_items']);
        array_push($items, $item, $sub);
    }
}

现在我认为我遇到问题的数组格式是正确的,但它位于项目之外。我也尝试过array_merge,但它添加了一个新的密钥,这会强制我不必要的ng-repeat来降级。建议...

3 个答案:

答案 0 :(得分:1)

更新:

您应该使用数组选项进行解码,然后使用ng-repeat迭代它们,但是为了使解码工作,您首先需要拆分字符串并获得第二部分:

$subItemsStr = explode('"sub_items":"[\"subOne\",\"subTwo\",\"subThree\"]"')[1];
$subItems = json_decode($subItemsStr, true);

然后你可以使用它。

答案 1 :(得分:0)

试试这个:

var myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl',function($scope) {
  var jsonObj = { 
    "sub_items":"[\"subOne\",\"subTwo\",\"subThree\"]"
  }

  var jsonString = jsonObj.sub_items;
  $scope.items = JSON.parse(jsonString);
});

<div ng-app="myApp" ng-controller="MyCtrl">
  <div ng-repeat="item in items">
    {{item}}
  </div>
</div>

答案 2 :(得分:0)

最后按照以下更改进行排序......

foreach($master as $index => $item) {
    foreach($item as $key => $value) {
        if($key == 'sub_items') {
            $sub = json_decode($value);
            unset($item['sub_items']);
            $item['sub_items'] = $sub;
        }
    }
    if($category == $item['category']) {
        array_push($items, $item);                  
    }
}

这返回......

...created_at":"2016-11-01 14:19:07","sub_items":["subOne","subTwo","subThree"...

不再将其视为字符串,使用Angular可以轻松完成。谢谢!