【问题标题】:How to access sub array within array elements?如何访问数组元素中的子数组?
【发布时间】:2020-09-25 11:31:31
【问题描述】:

这是一个 api 响应。我遇到的问题是这里有几个机组人员。我可以通过他们的基本索引找到任何人。我该怎么做才能只获取作者姓名,或者我应该说如何使用 Writer 作为参数访问数组并从该数组中获取他/她的姓名

  "crew": [
        {
          "credit_id": "53f52157c3a36833fa002225",
          "department": "Writing",
          "gender": 2,
          "id": 1930,
          "job": "Writer",
          "name": "Truman Capote",
          "profile_path": "/kmhddndt7hI38aN6NzbhPcnjKSh.jpg"
        },
        {
          "credit_id": "52fe4a6ec3a368484e152e99",
          "department": "Directing",
          "gender": 1,
          "id": 96199,
          "job": "Director",
          "name": "Liz Garbus",
          "profile_path": "/1Z5a6djeDX57yyLe2ixX3VzIaLJ.jpg"
        },
        {
          "credit_id": "53f5216dc3a36833fd0021bd",
          "department": "Writing",
          "gender": 1,
          "id": 96199,
          "job": "Writer",
          "name": "Liz Garbus",
          "profile_path": "/1Z5a6djeDX57yyLe2ixX3VzIaLJ.jpg"
        },
        {
          "credit_id": "53f52180c3a36834000023b2",
          "department": "Writing",
          "gender": 0,
          "id": 1355119,
          "job": "Writer",
          "name": "Ralph Greenson",
          "profile_path": null
        }
      ]

在此先感谢您的帮助。

【问题讨论】:

  • 你想从服务器端还是用户端过滤这些数据?
  • 来自服务器
  • 您想在哪里处理这些数据?在服务器端还是在客户端?

标签: php html json api


【解决方案1】:

所以根据大家的建议,我尝试调整一些东西,虽然速度不快但效果很好。(PHP 代码)

 $data = json_decode($response,true);

   $n = sizeof($data['crew']);

    for ($i=0; $i < $n; $i++) { 

        if($data['crew'][$i]['job']=='Writer')
        {
            echo $data['crew'][$i]['name'];
        }
    }

【讨论】:

    【解决方案2】:

    如果您想在 php 中处理 JSON 对象,请尝试以下代码

    <?php
      // JSON string
      $someJSON = '[{"name":"Jonathan Suh","gender":"male"},{"name":"William Philbin","gender":"male"},{"name":"Allison McKinnery","gender":"female"}]';
    
      // Convert JSON string to Array
      $someArray = json_decode($someJSON, true);
      print_r($someArray);        // Dump all data of the Array
      echo $someArray[0]["name"]; // Access Array data
    
      // Convert JSON string to Object
      $someObject = json_decode($someJSON);
      print_r($someObject);      // Dump all data of the Object
      echo $someObject[0]->name; // Access Object data
    ?>
    

    或者如果你想在 Javascript(客户端)中处理数据

    obj = [{
              "credit_id": "53f52157c3a36833fa002225",
              "department": "Writing",
              "gender": 2,
              "id": 1930,
              "job": "Writer",
              "name": "Truman Capote",
              "profile_path": "/kmhddndt7hI38aN6NzbhPcnjKSh.jpg"
            },
                    {
              "credit_id": "53f52157c3a36833fa002225",
              "department": "Writing",
              "gender": 2,
              "id": 1930,
              "job": "Writer",
              "name": "Truman Capote 2",
              "profile_path": "/kmhddndt7hI38aN6NzbhPcnjKSh.jpg"
            },
    ]
    
    obj.forEach(function(v,i){console.log(v.name)})
    

    【讨论】:

    • 我可以轻松做到这一点,但问题是我不希望所有内容都连续播放。我想要作家的数据,因为您可能会注意到还有其他类型的人(导演/制作)正在使用这个数组。我只想得到写作部门和作家的人名。
    • 所以你想过滤掉依赖于部门的数据??
    【解决方案3】:

    使用 PHP,您可以使用 FilterIterator 类,如下例所示...

    class CrewFilter extends FilterIterator {
        protected $department;
    
        public function __construct(Iterator $iterator, $department) {
            $this->department = $department;
            parent::__construct($iterator);
        }
    
        public function accept(): bool
        {
            $current = $this->getInnerIterator()->current();
            return $current->department === $department;
        }
    }
    
    $data = json_decode($response);
    $iterator = new ArrayIterator($data['crew']);
    
    $filter = new CrewFilter($iterator, 'Writing');
    foreach ($filter as $crew) {
        // output the name
        var_dump($crew->name);
    }
    

    上面的代码是做什么的。 FilterIterator 实例采用$department 参数,该参数为您想要查看的船员设置部门。第一个参数是一个迭代器的实例。在这种情况下,这将是来自 api 的 json 解码数据。对接收到的json数据进行解码是基本的。

    foreach 循环只会回馈部门Writing 的船员。

    【讨论】:

      【解决方案4】:

      如果您想从浏览器端搜索,假设您的 api 响应 json 在 obj 中,这里是 javascript 代码

      var results = [];
      var searchField = "job";
      var searchVal = "Writer";
      for (var i=0 ; i < obj.crew.length ; i++)
      {
          if (obj.list[i][searchField] == searchVal) {
              results.push(obj.list[i]);
          }
      }
      

      那么结果变量将包含所有作者数据 希望这是您正在寻找的解决方案

      【讨论】:

      • 不,它将从后端完成。结果将自动显示给用户。
      • okey 然后将参数传递给api并通过mysql查询过滤
      • 网页是完全动态的 html & php 并且没有连接到它的数据库。虽然将来我可能会连接 mysql 但暂时有办法使用 php 获取数据。
      • 那么您需要使用 json_decode() 将 json 数据转换为 php 数组/对象,然后过滤,过滤后 json_encode 数据并打印
      猜你喜欢
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多