如何将数组转换为多维数组


how to convert an array into multidimensional

我有一个数组要转换为多维数组。

这是阵列

Array
(
    [0] => Array
        (
            [packageid] => FGF1460676803
            [uniqueid] => uid1460676987
            [hotelname] => Jet Park Airport
            [Country] => New Zealand
        )
    [1] => Array
        (
            [packageid] => FGF1460678556
            [uniqueid] => uid1460678681
            [hotelname] => Mercure Windsor
            [Country] => New Zealand
        )
    [2] => Array
        (
            [packageid] => FGF1460678556
            [uniqueid] => uid1460678787
            [hotelname] => Jet Park Airport
            [Country] => New Zealand
        )
)

我试过这个代码,但没有显示出我想要的。这个数组是从mysql的两个表中提取的,第一个表携带packageid,第二个表携带uniqueid,hotelname,country,所以我连接了它,但我想连接下面的数组,但我被困在如何使用mysql或获取数组之后。

这是mysql查询

SELECT
    c.packageid,
    `uniqueid`,
    `hotelname`,
    `Country`
FROM
    custinfo c,
    hotelcarttemp h
WHERE
    c.packageid = h.packageid

PHP代码

foreach ($json_decode_array1 as $row)
{
   $newArray[$row['packageid']][] = $row;
}
echo '<pre>'; print_r($newArray); echo '</pre>';

想要输出

Array
(
    [0] => Array
        (   
            [packageid] => FGF1460676803
            [hoteldata] => Array
                    (
                        [0] => Array
                            (
                                [uniqueid] => uid1460676987
                                [hotelname] => Jet Park Airport
                                [Country] => New Zealand
                            )
                    )
        )
    [1] => Array
        (   
            [packageid] => FGF1460678556
            [hoteldata] => Array
                    (
                        [0] => Array
                            (
                                [uniqueid] => uid1460678681
                                [hotelname] => Mercure Windsor
                                [Country] => New Zealand
                            )
                        [1] => Array
                            (
                                [uniqueid] => uid1460678787
                                [hotelname] => Jet Park Airport
                                [Country] => New Zealand
                            )
                    )
        )
)

试试这个:

$newArray = array();
foreach ($json_decode_array1 as $row)
{
    $pid = $row['packageid'];
    if (!isset($newArray[$pid])) {
        $newArray[$pid] = array(
            'packageid' => $pid,
            'hoteldata' => array(),
        );
    }
    // if you don't want `packageid` 
    // to present in a arrays of `hoteldata`
    // you can `unset` this key:
    unset($row['packageid']);
    $newArray[$pid]['hoteldata'][] = $row;
}
// use array_values to turn array keys to numeric:
$newArray = array_values($newArray);

试试这个

$newArr = array();
    foreach($json_decode_array1 as $row) {
        $temp = array();
        $temp['packageid'] = $row['packageid'];
        $temp['hoteldata'] = array(
            'uniqueid' => $row['uniqueid'],
            'hotelname' => $row['hotelname'],
            'Country' => $row['Country'],
        );
        $newArr[] = $temp;
    }
    echo '<pre>';print_r($newArr);

使用array_walkarray_shiftarray_values函数的解决方案:

$result = [];
array_walk($arr, function($v) use(&$result) {   // $arr is your initial array
    $packageid = array_shift($v);
    if (!isset($result[$packageid])) {
        $result[$packageid] = ["packageid" => $packageid, "hoteldata" => [$v]];
    } else {
        $result[$packageid]["hoteldata"][] = $v;
    }    
});
print_r(array_values($result));

输出:

Array
(
    [0] => Array
        (
            [packageid] => FGF1460676803
            [hoteldata] => Array
                (
                    [0] => Array
                        (
                            [uniqueid] => uid1460676987
                            [hotelname] => Jet Park Airport
                            [Country] => New Zealand
                        )
                )
        )
    [1] => Array
        (
            [packageid] => FGF1460678556
            [hoteldata] => Array
                (
                    [0] => Array
                        (
                            [uniqueid] => uid1460678681
                            [hotelname] => Mercure Windsor
                            [Country] => New Zealand
                        )
                    [1] => Array
                        (
                            [uniqueid] => uid1460678787
                            [hotelname] => Jet Park Airport
                            [Country] => New Zealand
                        )
                )
        )
)