json使用php

时间:2017-07-13 10:34:07

标签: php arrays json

我需要你的帮助..我想使用json值调用json值...

这是我的样本json ......

第一个json:

{
  "first_name": "Richard Catibog",
  "last_name": "",
  "display_name": "Richard Catibog ",
  "roles": {
    "owner": false,
    "administrator": true
  },
  "login_count": 108,
  "enabled": true,
  "departments": [
    1817719575,
    1817719887,
    1817722991
  ],
  "id": 4142095,
  "last_login": "2017-07-12T10:03:57Z",
  "create_date": "2017-04-28T12:09:57Z",
  "email": "richard.catibog+21757948948@51talk.com"
},
{
  "first_name": "Rovi Cruz",
  "last_name": "",
  "display_name": "Rovi Roy Cruz ",
  "roles": {
    "owner": false,
    "administrator": true
  },
  "login_count": 98,
  "enabled": true,
  "departments": [
    1817719575,
    1817719887,
    1817722991
  ],
  "id": 4225009,
  "last_login": "2017-07-13T00:37:27Z",
  "create_date": "2017-06-05T06:15:49Z",
  "email": "rovi.cruz+21821290968@51talk.com"
}

第二个json:

[
  {
    "description": "Fees Support for American Academy",
    "settings": {

    },
    "enabled": false,
    "id": 1817719575,
    "name": "AA Fees Support [L2]"
  },
  {
    "description": "American Academy",
    "settings": {

    },
    "enabled": true,
    "id": 1817722991,
    "name": "Lesson and Fee Support"
  },
  {
    "description": "Technical Support",
    "settings": {

    },
    "enabled": true,
    "id": 1817719887,
    "name": "Technical Support"
  }
]

我想在第二个上调用id并使用第一个json上的部门ID列表回显名称...

这是我得到的...... enter image description here 但我希望看到的结果是AA费用支持[L2],课程和费用支持以及技术支持......

谢谢,希望你能帮帮我......

2 个答案:

答案 0 :(得分:1)

在这里,我创建了一个数组$desc,该数组以部门ID编号为基础,因此您可以轻松地将ID转换为描述

$js1 = '{
        "first_name": "Richard Catibog", "last_name": "",
        "display_name": "Richard Catibog ",
        "roles": { "owner": false,"administrator": true},
        "login_count": 108,"enabled": true,
        "departments": [1817719575,1817719887,1817722991],
        "id": 4142095,"last_login": "2017-07-12T10:03:57Z",
        "create_date": "2017-04-28T12:09:57Z",
        "email": "richard.catibog+21757948948@51talk.com"
}';

$js2 = '[
  {
    "description": "Fees Support for American Academy",
    "settings": {},"enabled": false,"id": 1817719575,
    "name": "AA Fees Support [L2]"
  },
  {
    "description": "American Academy",
    "settings": {},"enabled": true,"id": 1817722991,
    "name": "Lesson and Fee Support"
  },
  {
    "description": "Technical Support",
    "settings": {},"enabled": true,"id": 1817719887,
    "name": "Technical Support"
  }
]';

$first = json_decode($js1);
//print_r($first);
$second = json_decode($js2);
//print_r($second);

// make array key'd on the id
$desc = [];
foreach ($second as $s) {
    $desc[$s->id] = $s;
}
print_r($desc);

// go through all the dept id's in the first array
// getting a matching desctipyion from array 2
foreach ( $first->departments as $dept) {
    echo $desc[$dept]->description . PHP_EOL;
}

UPDATE:在第一个json数据结构更改为对象数组后

  

注意我通过在2个对象周围添加[]来更改您的第一个json数据结构以使其成为有效的JSON,以生成有效的JSON数据结构,即对象数组。

在这种情况下你需要做的就是添加一个循环来覆盖现在的对象数组。

$js1 = '[{
  "first_name": "Richard Catibog",
  "last_name": "",
  "display_name": "Richard Catibog ",
  "roles": {    "owner": false,    "administrator": true  },
  "login_count": 108,
  "enabled": true,
  "departments": [    1817719575,    1817719887,    1817722991  ],
  "id": 4142095,
  "last_login": "2017-07-12T10:03:57Z",
  "create_date": "2017-04-28T12:09:57Z",
  "email": "richard.catibog+21757948948@51talk.com"
},
{
  "first_name": "Rovi Cruz",
  "last_name": "",
  "display_name": "Rovi Roy Cruz ",
  "roles": {    "owner": false,    "administrator": true  },
  "login_count": 98,
  "enabled": true,
  "departments": [    1817719575,    1817719887,    1817722991  ],
  "id": 4225009,
  "last_login": "2017-07-13T00:37:27Z",
  "create_date": "2017-06-05T06:15:49Z",
  "email": "rovi.cruz+21821290968@51talk.com"
}]';

$js2 = '[
  {
    "description": "Fees Support for American Academy",
    "settings": {},"enabled": false,"id": 1817719575,
    "name": "AA Fees Support [L2]"
  },
  {
    "description": "American Academy",
    "settings": {},"enabled": true,"id": 1817722991,
    "name": "Lesson and Fee Support"
  },
  {
    "description": "Technical Support",
    "settings": {},"enabled": true,"id": 1817719887,
    "name": "Technical Support"
  }
]';

$first = json_decode($js1);
//print_r($first);
$second = json_decode($js2);
//print_r($second);

// make array key'd on the id
$desc = [];
foreach ($second as $s) {
    $desc[$s->id] = $s;
}
//print_r($desc);

//Loop through all the first array of object
foreach ( $first as $f) {
    // go through all the dept id's in the first array
    // getting a matching desctipyion from array 2
    foreach ( $f->departments as $dept) {
        echo $desc[$dept]->description . PHP_EOL;
    }
    echo PHP_EOL;
}

RESULT

Fees Support for American Academy
Technical Support
American Academy

Fees Support for American Academy
Technical Support
American Academy

答案 1 :(得分:0)

你去吧

$json1 = '{
        "first_name": "Richard Catibog",
        "last_name": "",
        "display_name": "Richard Catibog ",
        "roles": {
          "owner": false,
          "administrator": true
        },
        "login_count": 108,
        "enabled": true,
        "departments": [
          1817719575,
          1817719887,
          1817722991
        ],
        "id": 4142095,
        "last_login": "2017-07-12T10:03:57Z",
        "create_date": "2017-04-28T12:09:57Z",
        "email": "richard.catibog+21757948948@51talk.com"
}
';
$json2 ='[
  {
    "description": "Fees Support for American Academy",
    "settings": {

    },
    "enabled": false,
    "id": 1817719575,
    "name": "AA Fees Support [L2]"
  },
  {
    "description": "American Academy",
    "settings": {

    },
    "enabled": true,
    "id": 1817722991,
    "name": "Lesson and Fee Support"
  },
  {
    "description": "Technical Support",
    "settings": {

    },
    "enabled": true,
    "id": 1817719887,
    "name": "Technical Support"
  }
]';

$json1 = json_decode($json1, true);
$json2 = json_decode($json2, true);

$department = function($id) use($json2) {
    foreach($json2 as $dep) {
        if($dep["id"] == $id) {
            return $dep;
        }
    }
    return false;
};

foreach($json1["departments"] as $id) {
    $dep = $department($id);
    if(is_array($dep)) {
        echo sprintf("id: %s, name: %s\n", $id, $dep["name"]);
    }

}