首页 > 解决方案 > 将两个关联数组转换为一个多维数组 PHP

问题描述

我有 2 个关联数组,由以下 JSON 格式的 2 个查询产生:

{
  "competence": [
    {
      "id": "21",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla"
    },
    {
      "id": "11",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla"
    },
    {
      "id": "26",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla"
    }
  ],
  "schedule": [
    {
      "id": "34",
      "parent_id": "21",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla"
    },
    {
      "id": "33",
      "parent_id": "21",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla"
    },
    {
      "id": "32",
      "parent_id": "11",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla"
    },
    {
      "id": "31",
      "parent_id": "26",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla"
    }
  ]
}

上面这段代码生成的这两个数组:

<?php

$queryCompetence = mysqli_query($con, "SELECT `id`, `title`, `description`, `image` FROM `competence` ORDER BY `title` ASC");
$querySchedule = mysqli_query($con, "SELECT `id`, `id_competence`, `title`, `description`, `image` FROM `schedule` ORDER BY `created_date` DESC");

$competence = array();
$schedule = array();

while ($row = mysqli_fetch_assoc($queryCompetence)) {
    $competence[] = array(
        'id' => $row['id'],
        'title' => $row['title'],
        'description' => $row['description'],
        'image' => $row['image'],
    );
}

while ($row = mysqli_fetch_assoc($querySchedule)) {
    $schedule[] = array(
        'id' => $row['id'],
        'parent_id' => $row['id_competence'],
        'title' => $row['title'],
        'description' => $row['description'],
        'image' => $row['image'],
    );
}

$response['competence'] = $competence;
$response['schedule'] = $schedule;

echo json_encode($response);
die();

?>

我需要在 php 中创建一个多维数组,它将输出下面的 JSON:

{
  "competence": [
    {
      "id": "21",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla",
      "schedule": [
        {
          "id": "34",
          "parent_id": "21",
          "title": "blabla",
          "description": "blabla",
          "image": "blabla"
        },
        {
          "id": "33",
          "parent_id": "21",
          "title": "blabla",
          "description": "blabla",
          "image": "blabla"
        }
      ]
    },
    {
      "id": "11",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla",
      "schedule": [
        {
          "id": "32",
          "parent_id": "11",
          "title": "blabla",
          "description": "blabla",
          "image": "blabla"
        },
        {
          "id": "33",
          "parent_id": "21",
          "title": "blabla",
          "description": "blabla",
          "image": "blabla"
        }
      ]
    },
    {
      "id": "26",
      "title": "blabla",
      "description": "blabla",
      "image": "blabla",
      "schedule": [
        {
          "id": "31",
          "parent_id": "26",
          "title": "blabla",
          "description": "blabla",
          "image": "blabla"
        }
      ]
    }
  ]
}

我如何实现这一目标?我一直在网上搜索,但似乎没有运气。任何帮助都感激不尽。

谢谢你。

标签: phpmysqljsonmultidimensional-array

解决方案


您只需要遍历$schedule数组,将其值插入到$competence与inid$competence匹配的位置:parent_id$schedule

foreach ($schedule as $s) {
    // find the parent_id in $competence
    if (($key = array_search($s['parent_id'], array_column($competence, 'id'))) !== false) {
        $competence[$key]['schedule'][] = $s;
    }
}
$response = array('competence' => $competence);

3v4l.org 上的演示


推荐阅读