我最近开始将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来降级。建议...
答案 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可以轻松完成。谢谢!