Как вставить цикл foreach внутри многомерного массива - PullRequest
0 голосов
/ 04 марта 2019

Как вставить цикл foreach в многомерный массив?

У меня есть многомерный массив, который я использую для подключения моего сайта к Mailchimp.Я должен проверить с помощью цикла foreach количество продуктов, которые покупает пользователь, и добавить их в массив, называемый «линии».

В данный момент это мой код json, который после я отправлю в Mailchimp:

$json_data = '{
      "id": "2'. $order->id .'",
      "customer": {
        "id": "71",
        "email_address": "'.$order->email.'",
        "opt_in_status": true,
        "company": "'.$order->company_name.'",
        "first_name": "'.$order->pad_firstname.'",
        "last_name": "'.$order->pad_lastname.'",
        "orders_count": 1,
        "total_spent": 86
      },
      "checkout_url": "https://www.mywebsite.it/en/checkout/confirmation/",
      "currency_code": "EUR",
      "order_total": 86,
        "lines"[{
            '.$line_result.'
        }]
    }';

В $ line_result я пытаюсь добавить массив продуктов.Я знаю, что это неправильно.

весь массив внутри "строк" должен быть таким:

"lines":[
        {
            data product 1 ...
        },
        {
            data product 2 ...
        }
]

Это мой foreach:

foreach ($order->pad_products as $product) {
        $line_result['line'] = array(
            "id" => "$order->id",
            "product_id" => "$product->pad_product_id",
            "product_title" => "$product->title",
            "product_variant_id" => "$product->id",
            "product_variant_title" => "$product->title",
            "quantity" => "$product->pad_quantity",
            "price" => "$product->prezzo",
        );
    };

что такоеправильный способ вставить эти данные и создать многомерный массив, как мне нужно?Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Хочу сказать спасибо @adrianRosi за помощь и вклад, который он мне дает.

В конце я нахожу свое решение, что это json_encode массив перед добавлением в $ data в формате json.

таким образом:

            $product_list = [];    

            foreach ($order->pad_products as $product) {
                $product_list[] = array(
                    "id" => "$id",
                    "..." => "...",
                );
            };

            $data_products['lines'] = $product_list;
            $json_products = json_encode($data_products);
            $json_products_edit = substr($json_products, 1, -1); // to delete the {}

            $prezzo_totale = $order->pad_price_total;

            $json_data = '{
                ...
                ...
                '.$json_products_edit.'
            }';
0 голосов
/ 04 марта 2019

Вам просто нужно сохранить все $ line_result в глобальной переменной, а затем привязать ее к вашей модели json:

$results = [];

foreach ($order->pad_products as $product) {
    $results[] = array(
        "id" => $order->id,
        "product_id" => $product->pad_product_id,
        "product_title" => $product->title,
        "product_variant_id" => $product->id,
        "product_variant_title" => $product->title,
        "quantity" => $product->pad_quantity,
        "price" => $product->prezzo,
    );
};

$data = json_decode($json_data, true);
$data['lines'] = $results;
$json = json_encode($data);

РЕДАКТИРОВАТЬ: массив сценариев для json

$lines = [];

foreach ($order->pad_products as $product) {
    $lines[] = array(
        "id" => $order->id,
        "product_id" => $product->pad_product_id,
        "product_title" => $product->title,
        "product_variant_id" => $product->id,
        "product_variant_title" => $product->title,
        "quantity" => $product->pad_quantity,
        "price" => $product->prezzo,
    );
}

$data = [
    'id' => '2'.$order->id,
    'customer' => [
        'id' => '71',
        'email_address' => $order->email,
        'opt_in_status' => true,
        'company' => $order->company_name,
        'first_name' => $order->pad_firstname,
        'last_name' => $order->pad_lastname,
        'orders_count' => 1,
        'total_spent' => 86
    ],
    'checkout_url' => 'https://www.mywebsite.it/en/checkout/confirmation',
    'currency_code' => 'EUR',
    'order_total' => 86,
    'lines' => $lines
];

$jsonData = json_encode($data, JSON_UNESCAPED_UNICODE);
...