PHP / MySQL / Jquery - Построение ассоциативного массива и вывод его с использованием JQuery $ .each

0

Я создаю календарь (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'
  • 1
    Недостающим элементом здесь является сам запрос, но я думаю, что array_combine не обрабатывает дублирующиеся ключи так, как вам нужно. Вы можете решить это, либо уточнив свой запрос, либо просто сделав цикл для построения массива desc_qty из двух массивов, которые вы получаете из запроса. Я бы начал с запроса; она должна быть в состоянии предоставить вам необходимые данные в той форме, в которой вы нуждаетесь.
  • 0
    @Jerry Джерри, ты был прав насчет того, что array_combine не обрабатывает мои дубликаты ключей так, как мне нужно. Изменение моего запроса оказалось трудным, потому что данные, с которыми я работаю, не самые лучшие, поэтому я решил, что оба массива имеют одинаковое количество значений, я разделил их на 2 и использовал цикл jquery $ .each для объединения ключей , Спасибо за попытку направить меня в правильном направлении!
Показать ещё 2 комментария
Теги:
arrays
fullcalendar

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>";
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню