【问题标题】:PHP How to group json objectPHP如何对json对象进行分组
【发布时间】:2014-04-17 03:05:43
【问题描述】:

我想问一下json对象

我有这样的 json 对象:

{"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC01","TASK_NAME":"Human service 1"}
{"ID":"MM","ID_NAME":"Management","TASK_ID":"MM01","TASK_NAME":"Management 1"}
{"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC02","TASK_NAME":"Human service 2"}
{"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC03","TASK_NAME":"Human service 3"}
{"ID":"QC","ID_NAME":"Quality Control","TASK_ID":"QC01","TASK_NAME":"Quality Control 1"}
{"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC04","TASK_NAME":"Human service 4"}

我想将具有相同 id、id_name 的 json 对象分组。比如这样的

{"ID":"HC","ID_NAME":"Human Capital","items": [
     {"TASK_ID":"HC01","TASK_NAME":"Human service 1"},
     {"TASK_ID":"HC02","TASK_NAME":"Human service 2"},
     {"TASK_ID":"HC03","TASK_NAME":"Human service 3"},
     {"TASK_ID":"HC04","TASK_NAME":"Human service 4"}
   ]
},
{"ID":"MM","ID_NAME":"Management","items": [
     {"TASK_ID":"MM01","TASK_NAME":"Managemen 1"}
   ]
},
{"ID":"QC","ID_NAME":"Quality Control","items": [
     {"TASK_ID":"QC01","TASK_NAME":"Quality Control 1"}
   ]
},

请帮助我学习。

【问题讨论】:

  • 将你的json字符串解码为数组,使用循环分组,将结果数组编码为json,哪一步有问题?
  • 我在整理阵列时有一步。所以我有 $task[TASK_ID":"HC01","TASK_NAME":"Human service 1"]。所以我添加到数组 $menu["ID":"HC","ID_NAME":"Human Capital"," items":$task] 我很困惑如何将该任务数组放入正确的组

标签: php arrays json


【解决方案1】:

我们解码 JSON,遍历对象,将唯一的 IDs 添加到新数组,为 ITEMS 创建一个占位符数组,并将 TASK 附加到此 ITEMS。这一切都完成后,我们可以重新编码数据并返回。

代码:

// Your JSON array of objects
$json = <<<JSON
[
  {"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC01","TASK_NAME":"Human service 1"},
  {"ID":"MM","ID_NAME":"Management","TASK_ID":"MM01","TASK_NAME":"Management 1"},
  {"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC02","TASK_NAME":"Human service 2"},
  {"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC03","TASK_NAME":"Human service 3"},
  {"ID":"QC","ID_NAME":"Quality Control","TASK_ID":"QC01","TASK_NAME":"Quality Control     1"},
  {"ID":"HC","ID_NAME":"Human Capital","TASK_ID":"HC04","TASK_NAME":"Human service 4"}
]
JSON;

// Decode your JSON and create a placeholder array
$objects = json_decode($json);
$grouped = array();

// Loop JSON objects
foreach($objects as $object) {
    if(!array_key_exists($object->ID, $grouped)) { // a new ID...
         $newObject = new stdClass();

         // Copy the ID/ID_NAME, and create an ITEMS placeholder
         $newObject->ID = $object->ID;
         $newObject->ID_NAME = $object->ID_NAME;
         $newObject->ITEMS = array();

         // Save this new object
         $grouped[$object->ID] = $newObject;
    }

    $taskObject = new stdClass();

    // Copy the TASK/TASK_NAME
    $taskObject->TASK_ID = $object->TASK_ID;
    $taskObject->TASK_NAME = $object->TASK_NAME;

    // Append this new task to the ITEMS array
    $grouped[$object->ID]->ITEMS[] = $taskObject;
}

// We use array_values() to remove the keys used to identify similar objects
// And then re-encode this data :)
$grouped = array_values($grouped);
$json = json_encode($grouped);

输出:

文档:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2021-12-22
    • 2019-02-20
    • 1970-01-01
    • 2021-06-26
    • 2018-03-19
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多