Как сохранить значение массива и добавить другое значение php - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь записать название продукта и количество из данного заказа, затем прочитать из следующего заказа и добавить в массив, но в конечном массиве хранится только значение из последнего цикла, я не знаю, что я ' делаю неправильно, я также пытался использовать array_push. Я хотел бы подсчитать количество проданных единиц и отобразить их для всех заказов следующим образом: Продукт A - 50 штук. Продукт B - 30 штук, et c.

        foreach ($order_id as $order_ids) {
            //echo '</br>' . $vendor_id . ' ' . $vendor_mail . ' ' . $vendor_name . '</br>';

            $orderID = $order_ids->order_id;
            $order_date = $order_ids->date_created;
            $single_order = wc_get_order($orderID);
            echo '</br>';
            echo __('ID zamówienia: ') . $orderID . '<br>';
            echo __('Data zamówienia: ') . $order_date . '<br>';

            $product_quantity = array();
            $product_name = array();
            $single_order_array=array();
            $array_merge=array();
            foreach ($single_order->get_items() as $item) {


                echo __('Nazwa produktu: ') . $item->get_name() . '<br>';
                echo __('Ilość: ') . $item->get_quantity() . '<br><br><br>';

                $product_quantity[] = $item->get_quantity();
                $product_name[] = $item->get_name();

                $single_order_array=array_combine($product_name, $product_quantity);


            }

            echo '</br>TABLICA POJEDYNCZEGO ZAMOWIENIA: </br>';
            print_r($single_order_array);
            echo '</br></br>';

            $array_merge=array_replace_recursive($single_order_array, $array_merge);



        }
        echo '</br>TABLICA CAŁEGO WENDORA : </br>';
        print_r($array_merge);
        echo '</br></br>';
    } 
.

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Оригинальный ответ

В соответствии с вашим кодом $single_order_array будет перезаписываться в каждом l oop из foreach ($single_order->get_items() as $item). Таким образом, в этом массиве вы будете получать данные только для последнего элемента из заказа. Что касается использования array_replace_recursive Я не совсем понимаю вашу идею. Кстати, как вы получаете исходный массив $order_id?

РЕДАКТИРОВАТЬ

Попробуйте этот код:

$results=array(); // place this outside all loops
foreach ($order_id as $order_ids) {
            //echo '</br>' . $vendor_id . ' ' . $vendor_mail . ' ' . $vendor_name . '</br>';

            $orderID = $order_ids->order_id;
            $order_date = $order_ids->date_created;
            $single_order = wc_get_order($orderID);
            echo '</br>';
            echo __('ID zamówienia: ') . $orderID . '<br>';
            echo __('Data zamówienia: ') . $order_date . '<br>';

            $product_quantity = array();
            $product_name = array();
            $single_order_array=array();
            foreach ($single_order->get_items() as $item) {

                echo __('Nazwa produktu: ') . $item->get_name() . '<br>';
                echo __('Ilość: ') . $item->get_quantity() . '<br><br><br>';
                $product_quantity = $item->get_quantity();
                $product_name = $item->get_name();
                $single_order_array[]=array($product_name => $product_quantity);
            }

            echo '</br>TABLICA POJEDYNCZEGO ZAMOWIENIA: </br>';
            print_r($single_order_array);
            echo '</br></br>';

            foreach ($single_order_array as $product=>$quantity){
                if (array_key_exists($product, $results)){
                $results[$product]+=$quantity;}
                else {$results += array ($product=>$quantity);
                }
            }
        }
        echo '</br>TABLICA CAŁEGO WENDORA : </br>';
        print_r($results);
        echo '</br></br>';

Может работать, но не тестируется как Я понятия не имею, как данные заказов хранятся в вашем входном массиве $order_id.

0 голосов
/ 24 апреля 2020

Ваш для l oop обновляет значения. Вам нужно использовать ассоциативный массив и хранить в нем значения. Это решит вашу проблему.

$data = [];

for($i =0; $i<sizeof($items); $i++) 
{

$data[$i]['item_value_1'] = $items[$i]->item_value_1;
$data[$i]['item_value_2'] = $items[$i]->item_value_2;
$data[$i]['item_value_3'] = $items[$i]->item_value_3;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...