Php 如何从wpdb查询返回构建多维数组?

Php 如何从wpdb查询返回构建多维数组?,php,mysql,wordpress,Php,Mysql,Wordpress,我试图从查询返回构建多维数组,但遇到了一个问题。这里有一个经过消毒的片段,与我正在尝试做的类似。我的问题是构建子阵列。有什么建议可以得到我想要的结果吗?我使用了JSON,所以它会更明显。我可以解析数组或JSON <?php // this is my query global $wpdb; $locationData = $wpdb->get_results("SELECT locations.locationID, location

我试图从查询返回构建多维数组,但遇到了一个问题。这里有一个经过消毒的片段,与我正在尝试做的类似。我的问题是构建子阵列。有什么建议可以得到我想要的结果吗?我使用了JSON,所以它会更明显。我可以解析数组或JSON

<?php
// this is my query

global $wpdb;
        $locationData = $wpdb->get_results("SELECT
        locations.locationID,
        locations.location_name,
        locations.city,
        locations.state,
        locations.products,
        locations.type,
        locations.sku
");

// which returns something like

// [locationID] [location_name] [city] [state] [products] [type]      [sku]
//  001          Tulsa Outlet    Tulsa   OK    cakes      chocolate   3763
//  001          Tulsa Outlet    Tulsa   OK    cakes      lemon       3765
//  001          Tulsa Outlet    Tulsa   OK    sodas      coke        4983
//  001          Tulsa Outlet    Tulsa   OK    sodas      sprite      4950
//  and so on..

// I build an array to be consumed by another function that I created in my plugin:

foreach( $locationData as $key => $location ) {
        $output[$row['locationID']] = array(
            'locationID' => $row['locationID'],
            'location_name' => $row['location_name'],
            'products' => array(
                // this is where my previous attempts broke down
            )
        );
        $output[$key]['city'] = $location->city;
        $output[$key]['state'] = $location->state;
        }

// and the $output I need would look like this:

{
    "locations" : [
        {
            "locationID" : "001",
            "location_name" : "Tulsa Outlet",
            "products" : {
                "cakes" : {
                    "chocolate" : "3763",
                    "lemon" : "3765"
                },
                "sodas" : {
                    "coke" : "4983",
                    "sprite" : "4950"
                }
            },
            "city" : "Tulsa",
            "state" : "ok"
        }
    ]
}
?>
这些措施应有助于:

$output = [];
foreach ($locationData as $location) {
    $locId = $location->locationID;
    if (empty($output[$locId])) {
        $output[$locId] = [
            'locationID' => $location->locationID,
            'location_name' => $location->location_name,
            'city' => $location->city,
            'state' => $location->state,
            'products' => [],
        ];
    }
    $productType = $location->products;
    if (empty($output[$locId]['products'][$productType])) {
        $output[$locId]['products'][$productType] = [];
    }
    $output[$locId]['products'][$productType][$location->type] = $location->sku;
}
不确定您使用的是-$row还是$location,所以将所有内容都更改为$location

要将$output重新索引为0索引数组,请使用数组_值