【问题标题】:how to convert an array into multidimensional如何将数组转换为多维
【发布时间】:2016-05-14 11:20:36
【问题描述】:

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

这是数组

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
                            )
                    )
        )
)

【问题讨论】:

    标签: php mysql arrays multidimensional-array


    【解决方案1】:

    试试这个:

    $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);
    

    【讨论】:

    • $newArray[$pid]['hoteldata'] = $row; 这将覆盖 array() 而不是推送$row
    • @u_mulder 非常感谢您的回答,但它显示的输出类似于 Link
    • @VijayKumar 修正了我的答案:在 $newArray[$pid] = array() 中删除了 []
    • @u_mulder 你真的需要在第 8 行设置 'hoteldata' => array()。这是否必要,因为你最终创建了那个键?
    • @PetkoKostov 没必要,但我想知道我在这里有什么。
    【解决方案2】:

    试试这个

    $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);
    

    【讨论】:

      【解决方案3】:

      使用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
                              )
                      )
              )
      )
      

      【讨论】:

        猜你喜欢
        • 2019-07-09
        • 2011-08-24
        • 2019-04-03
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        • 1970-01-01
        • 2013-04-27
        • 2013-05-11
        相关资源
        最近更新 更多