Почему Foreach всегда получает последнее значение - PHP - PullRequest
0 голосов
/ 26 марта 2020

Я изменил свой вопрос, чтобы его было легче понять, вот мои вопросы, которые я обобщил в более простой код

TestArray. php

<?php

//Product Header
$products = array(
    array(
        "id" => "ABC1",
        "name" => "Produk ABC1",
        "variations" => array(
            1,2,3
        )
    ),
    array(
        "id" => "ABC2",
        "name" => "Produk ABC2",
        "variations" => array(
            4,5
        )
    )
);

//Product detail that has variant detail
$productABC1 = array(
    array(
        "id" => 1,
        "sku" => "SKU1"
    ),
    array(
        "id" => 2,
        "sku" => "SKU2"
    ),
    array(
        "id" => 3,
        "sku" => "SKU3"
    )
);

//Product detail that has variant detail
$productABC2 = array(
    array(
        "id" => 4,
        "sku" => "SKU4"
    ),
    array(
        "id" => 5,
        "sku" => "SKU5"
    )
);

var_dump ($ products)

Array
(
    [0] => Array
        (
            [id] => ABC1
            [name] => Product ABC1
            [variations] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

        )

    [1] => Array
        (
            [id] => ABC2
            [name] => Product ABC2
            [variations] => Array
                (
                    [0] => 4
                    [1] => 5
                )

        )

)

var_dump ($ productABC1)

Array
(
    [0] => Array
        (
            [id] => 1
            [sku] => SKU1
        )

    [1] => Array
        (
            [id] => 2
            [sku] => SKU2
        )

    [2] => Array
        (
            [id] => 3
            [sku] => SKU3
        )

)

var_dump ($ productABC2)

Array
(
    [0] => Array
        (
            [id] => 4
            [sku] => SKU4
        )

    [1] => Array
        (
            [id] => 5
            [sku] => SKU5
        )

)

как добавить элементы имени продукта к каждому варианту, которые имеют одинаковые номер вариации в массиве товаров? Заранее спасибо

1 Ответ

0 голосов
/ 26 марта 2020

Я думаю, это должно выглядеть так:

// Iterate productHeader to get name, and id
$productName = array();
foreach ($productHeader as $product) {
    $productId = $product->id;
    $productName[ $productId ] = $product->name;
    $urlProductVariant[ $productId ] =  $client_url . '' . $pathProductHeader . '/' . $productId . '/variations?consumer_key=' . $client_key . '&consumer_secret=' . $client_secret;
}

// Iterate through dataProduct to cURL url variant
foreach ($urlProductVariant as $productId => $curlVariant) {
    $chVariant = curl_init($curlVariant);
    curl_setopt($chVariant, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($chVariant, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($chVariant, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($chVariant, CURLOPT_RETURNTRANSFER, true);
    // Execute the curl
    $curl_response_variant = curl_exec($chVariant);
    // Decode the response and set to an array
    $productVariant[ $productId ] = json_decode($curl_response_variant);
}

// Iterate through productVariant to get data
foreach ($productVariant as $productId => $variant) {
    $sku = $variant->sku;
    // Get the individual name from the array productName
    $name = $productName[ $productId ];
    $data[] = array(
        "apikey" => $client_apikey,
        "managed_by" => "Batch Inbound",
        "code" => $sku,
        "name" => $name ." - ".$sku,
        "barcode" => $sku
    );
}
return $data;
...