PHP / MySQL / Jquery - 构建关联数组并使用JQuery $ .each输出它

问题描述 投票:0回答:1

我正在构建一个日历(FullCalendar),显示每天的订单以及单击订单时订购的商品。当$ order_info被放入$ data数组时,它缺少某些数据行,如下面第4个代码块中所示。我试图弄清楚如何将数组放在一起,以便应该显示的每个描述(键)与正确的数量(值)配对,然后使用jquery中的$ .each函数迭代。

当我从表中查询时,$ desc和$ qty变量被连接起来,所以我使用explode函数来分隔它们的值。

foreach($sql_query as $row) {
   $desc = array_map('trim', explode(',', $row['OlineDesc']));
   $qty = array_map('trim', explode(',', $row['OlineQty']));
   $order_info = array_combine($desc, $qty);

   $data[] = array (
     'start' => $row['OrderDate'],
     'order_id' => $row['OrderID'],
     'desc_qty' => $order_info
   );
}

在foreach的结束标记之后打印出数组:

echo "<pre>";
echo print_r($data);
echo "</pre>";

输出:

// Output when print_r($data)
[0] => Array
    (
        [start] => 2019-05-11 16:00:00
        [order_id] => 2509
        [description] => Time: 04:00PM
        [desc_qty] => Array
            (
                [#4 Beef and Pizza Special] => 1
                [6 Lbs Italian Beef] => 1
                [**incl Brd + Au Jus] => 1
                [**incl Sweet Peppers] => 1
                [**incl Hot Giardiniera] => 1
                [XL 18" Pizza] => 1
                [SAUSAGE] => 1
            )
    )

如果我使用array_merge来连接我的数组而不是array_combine,它会将所有键和值合并为首先是所有键,然后是值......但它至少显示每一行而不是有限的行数:

$order_info = array_merge($desc, $qty);

// Output when print_r($order_info)
    [desc_qty] => Array
        (
            [0] => #4 Beef and Pizza Special
            [1] => 6 Lbs Italian Beef
            [2] => **incl Brd + Au Jus
            [3] => **incl Sweet Peppers
            [4] => **incl Hot Giardiniera
            [5] => XL 18" Pizza
            [6] => SAUSAGE
            [7] => XL 18" Pizza
            [8] => XL 18" Pizza
            [9] => 1
            [10] => 1
            [11] => 1
            [12] => 1
            [13] => 1
            [14] => 1
            [15] => 1
            [16] => 1
            [17] => 1
         )

然后我使用绑定到onClick事件的jquery将信息加载到div中,其中key是项的描述,值是数量:

$.each( event.desc_qty, function( key, value ) {
     document.getElementById("party_info").innerHTML += "<span class="+key+">" + key + "<span id='sum_"+key+"'>" + value + "</span></span>";
});

我的代码当前输出:

#4 Beef and Pizza Special 1
6 Lbs Italian Beef 1
**incl Brd + Au Jus 1
**incl Sweet Peppers 1
**incl Hot Giardiniera 1
XL 18" Pizza 1
SAUSAGE 1

我想要实现的预期输出:

 #4 Beef and Pizza Special 1
 6 Lbs Italian Beef 1
 **incl Brd + Au Jus 1
 **incl Sweet Peppers 1
 **incl Hot Giardiniera 1
 XL 18" Pizza 1
 SAUSAGE 1
 XL 18" Pizza 1
 XL 18" Pizza 1

任何帮助或方向将不胜感激!谢谢!

编辑:

这是我的SQL查询。我正在使用3个不同的表来收集我所有的信息,我在那里匹配ID以获取正确的信息。

SELECT a.OrderDate, a.OrderID, a.OrdCustName, a.OrdPhone, b.OtotOrder, 
b.OtotTotal, c.OlineOrder, GROUP_CONCAT(c.OlineDesc SEPARATOR ',') as 
'OlineDesc', GROUP_CONCAT(FLOOR(COALESCE(c.OlineQty,'1'))) as 
'OlineQty'
FROM db.tbldeferredorders a, db.tbldeferredordtotals b, 
db.tbldeferredordlines c
WHERE a.OrderID = b.OtotOrder AND a.OrderID = c.OlineOrder
AND a.OrderDate >= NOW() - INTERVAL 3 MONTH
GROUP BY a.OrderID

此查询将OlineDesc列拉入一个类似于此的连接字符串。每个逗号都来自一个单独的行,我根据a.OrderID汇总在一起。因此,对于此特定行,OrderID为“2536”。

'#4 Beef and Pizza Special,6 Lbs Italian Beef,**incl Brd + Au 
Jus,**incl Sweet Peppers,**incl Hot Giardiniera,XL 18" Pizza,XL 18" 
Pizza,SAUSAGE,XL 18" Pizza,PEPPERONI,Lrg Caesar Salad,** ceaser 
dressing,Lg 3 Cheese Baked Penne'

运行查询时,OlineQty列如下所示:

'1,1,1,1,1,1,1,1,1,1,1,1,1'
php jquery mysql arrays fullcalendar
1个回答
1
投票

它可能不是最优雅的解决方案,但我找到了解决问题的方法。我发现array_combine不能有重复的键,所以我决定使用2而不是只有一个数组。由于两个数组对数量的描述数量相等,我采用了描述数组并使用$ .each循环遍历它,然后我将它与qty [key]配对,因为它正在通过每个循环。这与线路相匹配。

$.each( event.desc, function( key, value ) {
 document.getElementById("party_info").innerHTML += "<span class="+value+">" + key + "<span id='sum_"+value+"'>" + event.qty[key] + "</span></span>";
});
© www.soinside.com 2019 - 2024. All rights reserved.