Я создаю календарь (FullCalendar), который показывает заказы на каждый день и элементы, которые были заказаны при нажатии на заказ. Когда $ order_info помещается в массив $ data, в нем пропускаются определенные строки данных, как показано ниже в 4-м кодовом блоке вниз. Я пытаюсь выяснить, как соединить массив так, чтобы каждое описание (ключ), которое должно быть показано, было соединено с правильным количеством (значением), а затем итерировано с использованием функции $.each в jquery.
Переменные $ desc & $ qty объединяются, когда я запрашиваю их из своей таблицы, поэтому я использую функцию разнесения для разделения их значений.
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
)
Затем я использую jquery, который связан с событием onClick, чтобы загрузить информацию в div, где ключ - это описание элемента, а значение - это количество:
$.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 разные таблицы, чтобы собрать всю свою информацию, где я сопоставляю идентификатор, чтобы получить правильную информацию.
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 [ключ], как он проходил через каждый цикл. Это соответствовало линии за линией.
$.each( event.desc, function( key, value ) {
document.getElementById("party_info").innerHTML += "<span class="+value+">" + key + "<span id='sum_"+value+"'>" + event.qty[key] + "</span></span>";
});
desc_qty
из двух массивов, которые вы получаете из запроса. Я бы начал с запроса; она должна быть в состоянии предоставить вам необходимые данные в той форме, в которой вы нуждаетесь.