在PHP中合并嵌套数组,返回json

时间:2016-05-06 18:27:38

标签: php json

我正在尝试使用PHP将至少两个数组合并到JSON中。目前这是我的代码:

/* Get most frequently used applications */
$var = array();
$sql = "SELECT * FROM MostFrequentlyApps WHERE UID = 'yxz'";
$result = mysqli_query($con, $sql);

while($obj = mysqli_fetch_object($result)) {
    $var[] = $obj;
}

$allData = array_merge($allData,$var);

/* Get user favorites */
$var = array();
$sql = "SELECT * FROM UserFavorites WHERE UID = 'yxz'";
$result = mysqli_query($con, $sql);

while($obj = mysqli_fetch_object($result)) {
    $var[] = $obj;
}

$allData = array_merge($allData,$var);

echo json_encode($allData);

我得到的JSON代码看起来像这样:

[

{

    "UID": "xyz",
    "Application": "Test",
    "AppLink": "http://www.google.com",
    "AppIcon": "icon.png"

},
{

    "UID": "xyz",
    "Application": "Test2",
    "AppLink": "http://www.facebook.com",
    "AppIcon": "icon2.png"

},
{

    "UID": "xyz",
    "URL": "www.yahoo.com"

},

{
     "UID": "xyz",
     "URL": "www.bing.com"
}

]

但我需要结果看起来像这样,所以有一种层次结构,其中一部分播放应用程序,另一部分显示收藏夹:

    {

        "apps": 

    [

    {

        "UID": "xyz",
        "Application": "Test",
        "AppLink": "http://www.google.com",
        "AppIcon": "Icon.png"

    },

    {
        "UID": "xyz",
        "Application": "Test2",
        "AppLink": "http://www.facebook.com",
        "AppIcon": "icon2.png"
    }
]

    "favs": 

 [

    {

        "UID": "xyz",
        "URL": "www.yahoo.com"
    },

    {
         "UID": "xyz",
         "URL": "www.bing.com"
    }
]

}

但我的问题是,我不知道如何合并这两个数组并最终得到这个层次结构。我是否必须首先合并数组然后将它们编码为JSON?也许有人可以给我一个提示。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您需要做什么:

// result array with two sub-arrays
$allData = array(
    'favs' => array(),
    'apps' => array(),
);

/* Get most frequently used applications */
$sql = "SELECT * FROM MostFrequentlyApps WHERE UID = 'yxz'";
$result = mysqli_query($con, $sql);

// add apps right to `apps` sub=array
while($obj = mysqli_fetch_object($result)) {
    $allData['apps'][] = $obj;
}

/* Get user favorites */
$sql = "SELECT * FROM UserFavorites WHERE UID = 'yxz'";
$result = mysqli_query($con, $sql);

// add favourites right to `favs` sub=array
while($obj = mysqli_fetch_object($result)) {
    $allData['favs'][] = $obj;
}

echo json_encode($allData);

答案 1 :(得分:0)

试试这个

/* Get most frequently used applications */
$apps = array();
$sql = "SELECT * FROM MostFrequentlyApps WHERE UID = 'yxz'";
$result = mysqli_query($con, $sql);

while($obj = mysqli_fetch_object($result)) {
    $apps[] = $obj;
}



/* Get user favorites */
$favs = array();
$sql = "SELECT * FROM UserFavorites WHERE UID = 'yxz'";
$result = mysqli_query($con, $sql);

while($obj = mysqli_fetch_object($result)) {
    $favs[] = $obj;
}

$allData = array("apps"=> $apps,"favs"=> $favs);

echo json_encode($allData);