首页 > 解决方案 > 使用 PHP 的动态 JSON 数组

问题描述

我正在使用 PHP 和一些 JSON 数组来显示表中的数据。以下代码类似于下图:

在此处输入图像描述

我的问题:我使用以下代码在 android 应用程序上向我的用户提供一些包。在我的food_category桌子上,ID 6-7-8 是饮料、餐点和甜点。如何在许多数组中显示完整的食物和饮料以及膳食和甜点,如下图所示,显示 1 个数组的所有信息?现在我的代码在一些数组中分隔了 ids 和 names 和 ...。你们能帮帮我吗,伙计们?

在此处输入图像描述

食物表:

在此处输入图像描述

代码:

public function package_recommender($restaurant_id, $count, $money)
{
    $response = array();
    $response['success'] = true;
    $response['message'] = "success";
    $connection = null;


    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    try {
        $connection = mysqli_connect("localhost", "root", "", PackageRecommender::DATABASE_NAME);

        $sqlQuery1 = "SELECT * FROM food where NOT foodCategory_id=6 And NOT foodCategory_id=7 And NOT foodCategory_id=8 And restaurant_id='$restaurant_id' And stock>='$count' And isActive = 1;";
        $result1 = $connection->query($sqlQuery1);

        $sqlQuery2 = "SELECT * FROM food WHERE foodCategory_id=7 And restaurant_id = '$restaurant_id' And stock>'$count' And isActive = 1 order by updateDate desc;";
        $result2 = $connection->query($sqlQuery2);


        $sqlQuery3 = "SELECT * FROM food WHERE foodCategory_id=8 And restaurant_id = '$restaurant_id' And isActive = 1 order by updateDate desc;";
        $result3 = $connection->query($sqlQuery3);

        $sqlQuery4 = "SELECT * FROM food WHERE foodCategory_id=6 And restaurant_id = '$restaurant_id' And isActive = 1 order by updateDate desc;";
        $result4 = $connection->query($sqlQuery4);

        $desertArray = $result2->fetch_assoc();
        $drinkArray = $result3->fetch_assoc();
        $mealArray = $result4->fetch_assoc();

        $packagesArray = array();

        if ($result1->num_rows > 0) {
            $foodArray = $result1->fetch_assoc();
            foreach ($foodArray as $key => $foodValue) {
                $package = array();
                $package['food'] = $foodValue;

                if (isset($mealArray[$key])) {
                    $package['meal'] = $mealArray[$key];
                }
                if (isset($drinkArray[$key])) {
                    $package['drink'] = $drinkArray[$key];
                }
                if (isset($desertArray[$key])) {
                    $package['desert'] = $desertArray[$key];
                }

                array_push($packagesArray, $package);
            }
            $response["package"] = $packagesArray;
        }

        echo json_encode($response);
    } catch (mysqli_sql_exception $e) {
        $response['success'] = false;
        $response['message'] = "error 101";
        die(json_encode($response));
    }
}

标签: phparraysjson

解决方案


好吧,我将在这里进行一个巨大的飞跃,假设您拥有相同数量的食物、膳食、饮料和甜点,并且您只想将它​​们作为一个组合显示在一个包装中,而没有任何特定的顺序或逻辑。

因此,查看您的代码,您现在有 4 个数组:

$foodArray = array();
$desertArray = array();
$drinkArray = array();
$mealArray = array();

如果你想将它们简单地组合成一个包,这将是最简单的方法,首先你声明一个包数组:

$packagesArray = array();

然后只需遍历您的一个数组(如食物),制​​作一个键值对,在一个 foreach 循环中检查其他数组并添加一个包:

foreach ($foodArray as $key => $foodValue){

    $package = array();
    $package['food'] = $foodValue;

    if(isset($mealArray[$key])){
        $package['meal'] = $mealArray[$key];
    }
    if(isset($drinkArray[$key])){
        $package['drink'] = $drinkArray[$key];
    }
    if(isset($desertArray[$key])){
        $package['desert'] = $desertArray[$key];
    }

    array_push($packagesArray, $package);
}

$response["package"] = $packagesArray;

现在,就像我说的,我不知道这些包裹是否在某种程度上与食物、饮料和膳食有关。这只是一个简单的例子。


推荐阅读