【问题标题】:Angularjs how to handle a 2 dimensional array from php (json)Angularjs如何处理来自php(json)的二维数组
【发布时间】:2021-07-23 15:04:36
【问题描述】:

我正在使用 php、angularjs 等创建一个网站。 有一个视图/状态 (ui-router) 触发服务以查询 Active Directory 以获取特定国家/地区的人员信息。 到目前为止,这有效。我从 php 文件中收到信息。

接收到的信息是来自 php 的 json 编码的二维数组,如下所示:

{"Sweden":["Larsson","Svensson"],"Poland":["surname1","surname2"],"Italy":["surname3","surname4"],"Malta":["surname5"]}

控制器看起来像:

$scope.fetch = function(){
        var members = countryService.read();
        members.then(function(response){
            $scope.members = response.data;
            console.log('read succesful');
        });
    }
    $scope.fetch();

所以所有信息都在 ($scope.)members 中可用

现在的问题是,我如何遍历这些信息,它看起来像:

Country: Sweden
Members: Larsson
         Svensson
Country: Poland
Members: surname1
         surname2

等等……

ps。视图中的 {{members}} 有效。我看到上面的json字符串..

谢谢

【问题讨论】:

    标签: php arrays json angularjs


    【解决方案1】:

    @charlietfl

    是的,但我无法在我的 php 代码中正确获取关联部分... 我无法设置“国家”:“瑞典”,然后添加人员...

    稍后,当在 (ui-) 视图中显示信息正常时,我将添加有关人员的更多信息。

    无论如何,这里是 php sn-p:

    $countrySupport = array();
        $temp = array();
        $count = 0;
            //looping through filtered array for per country information...
        foreach($countryResult as $country){
            
            for($y=0;$y<$entries['count'];$y++){
                if(ISSET($entries[$y]['co'][0]) && $entries[$y]['co'][0] == $country){
                    array_push($temp,$entries[$y]['sn'][0]);
                   
                }
                
            }
            $countrySupport[$country]=$temp; 
            unset($temp);
            $temp = array();
            $count++;
            */
            
        }
    

    其中 countryResult 是包含在 AD 组中找到的国家/地区的数组。 然后我遍历所有条目并查看该人的国家/地区是否与 countryResult 数组匹配....如果是,则将该人添加到 countrySupport 数组中的该“国家”。

    【讨论】:

    • $entries 是否包含成员?
    • $entries 基本上包含了这个人的所有属性(结果)
    • 这真的不能告诉我太多
    • $entries 是 AD 查询的结果。所以例如$entries[0]['co'][0] 是查询结果中的第一个“国家”。 $entries[1]['co'][0] 第二个等等。所以我要做的是,我有一个包含国家/地区的数组……我使用 foreach 遍历这个数组。如果国家/地区与 $entries[0]['co'][0] 匹配,我需要添加例如那个国家的姓氏。结果应该是我和某个国家下面的人有一个阵法。我需要在主页上显示这个......
    【解决方案2】:

    如果您更改 php 响应数据结构以使用包含具有一致键名的对象的非关联外部数组,您将有一个更简单的时间:

    [
      {
        "country": "Sweden",
        "members": [
          {
            "id": 1,
            "name": "Larsson"
          }
        ]
      }
    ]
    

    例子:

    angular.module('app', [])
      .controller('main', ($scope, $q) => {
        fakeFetch().then(response => {
          $scope.members = response.data;
        });
    
        function fakeFetch() {
          var def = $q.defer();
          def.resolve({data})
          return def.promise
        }
      });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
    
    
    <div ng-app="app" ng-controller="main">
      <div ng-repeat="item in members track by $index">
        <div>Country: {{item.country}}</div>   
        <ul>
          <li ng-repeat="mem in item.members track by $index">
             {{mem.name}}
          </li>
        </ul>
      </div>
    </div>
    
    
    <script>
      const data = [{
          "country": "Sweden",
          "members": [{
              "id": 1,
              "name": "Larsson"
            },
            {
              "id": 18,
              "name": "Svensson"
            }
          ]
        },
        {
          "country": "Malta",
          "members": [{
              "id": 7,
              "name": "Foo"
            },
            {
              "id": 33,
              "name": "Bar"
            }
          ]
        }
      ]
    </script>

    【讨论】:

    • 我使用了“答案”来显示构建数组的 php 代码。我无法使关联部分正确...由于二维数组我必须填写循环...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2015-11-14
    • 1970-01-01
    • 2014-07-13
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多