我正在构建一个日历(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'
它可能不是最优雅的解决方案,但我找到了解决问题的方法。我发现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>";
});