【问题标题】:How to properly use for loop when fetching data in mysql and storing it in array then implode it to display in my jquery data table?在mysql中获取数据并将其存储在数组中然后将其内爆以显示在我的jquery数据表中时如何正确使用for循环?
【发布时间】:2020-07-23 01:04:16
【问题描述】:

我的代码需要帮助。我想要的是显示我的数据,看起来像这种格式: 商店 |类别 |产品名称 |说明 |价格 |时间戳 |行动 样本:样本猫:样本产品:样本描述:样本标签 - 样本价格:样本时间戳:样本操作

我的查询是这样的: $get_product = $mysqli->query("SELECT b.menu_name AS store, a.category AS category, a.product AS product, a.description AS description, a.stamp AS stamp, a.id AS id, a.image作为图像来自 lfood a JOIN branch_map b ON a.menu_map = b.id WHERE a.status = 1 ".$searchQuery." ORDER BY ".$columnName." ".$columnSortOrder." LIMIT ".$row." , ".$rowperpage." ");

然后我像这样获取它们:

$data = array();
while ($row = $sms_subs->fetch_assoc()) {
    $menu_id[]      = $row['id'];
    $image[]        = $row['image'];
    $store[]        = $row['store'];
    $category[]     = $row['category'];
    $product[]      = $row['product'];
    $description[]  = $row['description'];
    $stamp[]        = $row['stamp'];
}

for ($i=0; $i < count($menu_id); $i++) {
    $get_price = $mysqli->query("SELECT * FROM lfood_price WHERE menu_id = '".$menu_id[$i]."'");
    while ($row_price = $get_price->fetch_assoc()) {
        $price[] = $row_price['label'].' : '.number_format($row_price['price']);
    }
    $new_price = implode("<br>", $price);
    $data[] = array(
        "store"         => $store[$i],
        "category"      => $category[$i],
        "product"       => $product[$i],
        "description"   => $description[$i],
        "price"         => $new_price,
        "stamp"         => date("F d Y h:i:s A", strtotime($stamp[$i])),
        "actions"       => "sample"
    );
}

我有另一张表来存储我的产品的所有价格。结果不是它想要的, This is the actual result

在我的第二行数据中,它显示了所有价格记录,即使它不属于该 ID。我的想法是在获取价格时不恰当地使用我的 for。对于我的问题,请有人帮助/启发正确使用 for 循环。非常感谢!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    问题是$new_price = implode("&lt;br&gt;", $price);

    遍历 for 循环: 第一次通过它找到虾和橄榄油的价格。价格数组现在是["FS:570", "PS:1085"],然后它被分解并保存到数据数组中。 第二次通过它获得新西兰肌肉的价格。价格数组现在是["FS:570", "PS:1085", "FS(16pcs):695", "PS(32pcs):1315"]。它被内爆并保存到数据数组中。

    解决方法是每次循环都清空$price

    for ($i=0; $i < count($menu_id); $i++) {
        $price = [];
        $get_price = $mysqli->query("SELECT * FROM lfood_price WHERE menu_id = '".$menu_id[$i]."'");
        while ($row_price = $get_price->fetch_assoc()) {
            $price[] = $row_price['label'].' : '.number_format($row_price['price']);
        }
        $new_price = implode("<br>", $price);
        $data[] = array(
            "store"         => $store[$i],
            "category"      => $category[$i],
            "product"       => $product[$i],
            "description"   => $description[$i],
            "price"         => $new_price,
            "stamp"         => date("F d Y h:i:s A", strtotime($stamp[$i])),
            "actions"       => "sample"
        );
    }
    

    但是,您可能应该研究多维数组、foreach 循环和 mysql 连接。所有这些都会大大简化您的代码。

    【讨论】:

    • 非常感谢兄弟!没想到这一点,因为我只是编程新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多