Конструкция многомерного массива - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть этот тип массива, который я получил из моего результата SQL.

+-------------+---------------+-----------------+----------------+
| business_id | business_name | business_branch | branch_contact |
+-------------+---------------+-----------------+----------------+
|      1      |      ABC      |        1        |   1111111111   |
+-------------+---------------+-----------------+----------------+
|      1      |      ABC      |        2        |   2222222222   |
+-------------+---------------+-----------------+----------------+
|      1      |      ABC      |        3        |   3333333333   |
+-------------+---------------+-----------------+----------------+
|      1      |      ABC      |        4        |   4444444444   |
+-------------+---------------+-----------------+----------------+
|      2      |      XYZ      |        1        |   5555555555   |
+-------------+---------------+-----------------+----------------+
|      2      |      XYZ      |        2        |   6666666666   |
+-------------+---------------+-----------------+----------------+

Вначале я думал о том, чтобы сделать отдельный запрос к базе данных для каждого филиала и предприятия. Но узнал, что это плохая практика.

Я хочу построить результаты следующим образом

[
{
  business_id : 1,
  business_name : ABC,
  branches : [
  {
    branch_id : 1,
    branch_contact : 1111111111
  },
  {
    branch_id : 2,
    branch_contact : 2222222222
   },
   ...
 },
 {
   business_id : 1,
   business_name : ABC,
   branches : [
   {
      ...
   }
 }
]
}

Текущая функция, которую я пытаюсь создать, не дает необходимого результата. Это показано ниже.

$previousBusiness = '';
$previousBranch = '';
$businessAndBranchArray = [];
$businessArray = [];
$branchArray = [];

foreach ($results as $result) {
    $currentBranch = [];
    $currentBusiness = [];
    $currentMerchant = [];

    if($result['business_id'] != $previousBusiness && $result['branch_id'] != $previousBranch){

        if($previousBranch != '' && $previousBusiness != ''){

            $businessArray['business_id'] = $result['business_id']; 
            $businessArray['business_id'] = $result['business_name'];

            $branchArray['branch_id'] = $result['branch_id'];
            $branchArray['branch_contact'] = $result['branch_contact'];

        } else {

            $businessArray['business_id'] = $result['business_id']; 
            $businessArray['business_id'] = $result['business_name'];

            $branchArray['branch_id'] = $result['branch_id'];
            $branchArray['branch_contact'] = $result['branch_contact'];
        }
        $previousBusiness = $result['business_id']; 

    } else {
        $branchArray['branch_id'] = $result['branch_id'];
        $branchArray['branch_contact'] = $result['branch_contact'];
    }

}

1 Ответ

0 голосов
/ 12 сентября 2018

Нет необходимости отслеживать предыдущие элементы и тому подобное, просто используйте идентификатор в качестве ключа массива, чтобы вы могли проверить, существует ли он.Если вы не хотите, чтобы это было в вашем конечном выводе, используйте array_values() для удаления ключей:

<?php
$results = [
    ["business_id" => 1, "business_name" => "ABC", "business_branch" => 1, "branch_contact" => "1111111111"],
    ["business_id" => 1, "business_name" => "ABC", "business_branch" => 2, "branch_contact" => "2222222222"],
    ["business_id" => 1, "business_name" => "ABC", "business_branch" => 3, "branch_contact" => "3333333333"],
    ["business_id" => 1, "business_name" => "ABC", "business_branch" => 4, "branch_contact" => "4444444444"],
    ["business_id" => 2, "business_name" => "XYZ", "business_branch" => 1, "branch_contact" => "5555555555"],
    ["business_id" => 2, "business_name" => "XYZ", "business_branch" => 2, "branch_contact" => "6666666666"],
];
$output = [];

foreach ($results as $result) {
    if (empty($output[$result["business_id"]])) {
        $output[$result["business_id"]] = [
            "business_id" => $result["business_id"],
            "business_name" => $result["business_name"],
            "branches" => [],
        ];
    }
    $output[$result["business_id"]]["branches"][] = [
        "branch_id" => $result["business_branch"],
        "branch_contact" => $result["branch_contact"],
    ];
}

echo json_encode(array_values($output), true);

Вывод:

[{"business_id":1,"business_name":"ABC","branches":[{"branch_id":1,"branch_contact":"1111111111"},{"branch_id":2,"branch_contact":"2222222222"},{"branch_id":3,"branch_contact":"3333333333"},{"branch_id":4,"branch_contact":"4444444444"}]},{"business_id":2,"business_name":"XYZ","branches":[{"branch_id":1,"branch_contact":"5555555555"},{"branch_id":2,"branch_contact":"6666666666"}]}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...