【问题标题】:Retrieving array keys from JSON input从 JSON 输入中检索数组键
【发布时间】:2012-06-10 11:55:12
【问题描述】:

我有这个数组:

$json = json_decode('
{"entries":[
{"id": "29","name":"John", "age":"36"},
{"id": "30","name":"Jack", "age":"23"}
]}
');

我正在寻找一个 PHP“for each”循环,它可以检索entries 下的键名,即:

id
name
age

我该怎么做?

【问题讨论】:

    标签: php arrays json foreach


    【解决方案1】:
    foreach($json->entries[0] AS $key => $name) {
        echo $key;
    }
    

    【讨论】:

    • 谢谢米海。不幸的是,我得到了这个:致命错误:不能使用 stdClass 类型的对象作为数组
    【解决方案2】:

    你可以这样做:

    foreach($json->entries as $record){
        echo $record->id;
        echo $record->name;
        echo $record->age;
    }
    

    如果您将true 作为json_decode 函数中第二个参数的值传递,您将能够将解码后的值用作数组。

    【讨论】:

    • 这将获取实际值。我正在寻找关键名称。谢谢!
    • 为此,您需要将 $json 对象改为数组。为此,您需要将第二个参数提供给json_decode() 函数
    • 我忘了补充,然后你应该使用$json对象作为数组并使用foreach($json['entries'] as $record){ foreach($record as $key=>$value){...}}
    • 我不知道字段名称可以用作属性 (+1)。拯救了我的一天!
    【解决方案3】:

    试试看

    foreach($json->entries as $row) {
        foreach($row as $key => $val) {
            echo $key . ': ' . $val;
            echo '<br>';
        }
    }
    

    在 $key 中您将获得键名,在 val 中您将获得值

    【讨论】:

    • 嗨,我有 json 文件,即 file.json 我想以表格格式显示数据尝试在这里集成是代码 $val) { echo $key . ':'。 $val;回声'
      ';这是错误:警告:在第 6 行的 /var/www/html/new_git/json.php 中为 foreach() 提供的参数无效
    【解决方案4】:

    您可以尝试使用get_object_vars 获取对象的属性:

     $keys = array();
    
     foreach($json->entries as $entry)
       $keys += array_keys(get_object_vars($entry));
    
     print_r($keys);
    

    【讨论】:

      【解决方案5】:

      我对其他答案不满意,所以我添加了自己的答案。我认为最通用的方法是:

      $array = get_object_vars($json->entries[0]);
      foreach($array as $key => $value) {
        echo $key . "<br>";
      }
      

      我在这里使用了entries[0],因为您假设entries 数组的所有元素都具有相同的键。

      查看key的官方文档:http://php.net/manual/en/function.key.php

      【讨论】:

        【解决方案6】:
            $column_name =[];
            foreach($data as $i){
                foreach($i as $key => $i){
                    array_push($column_name, $key);
                }
                break;
            }
        

        【讨论】:

        • 考虑添加一些解释。强烈建议不要只回答代码!
        【解决方案7】:

        使用数组而不是对象的替代答案 - 将 true 传递给 json_decode 将返回一个数组。

        $json = '{"entries":[{"id": "29","name":"John", "age":"36"},{"id": "30","name":"Jack", "age":"23"}]}';
        $data = json_decode($json, true);
        $entries = $data['entries'];
        
        foreach ($entries as $entry) {
            $id = $entry['id'];
            $name = $entry['name'];
            $age = $entry['age'];
            printf('%s (ID %d) is %d years old'.PHP_EOL, $name, $id, $age);
        }
        

        https://www.tehplayground.com/17zKeQcNUbFwuRjC测试

        【讨论】:

          猜你喜欢
          • 2019-08-25
          • 2011-05-17
          • 2011-11-15
          • 2018-12-15
          • 2021-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多