Как объединить два многомерных массива и настроить существующие значения? - PullRequest
0 голосов
/ 02 ноября 2019

Я хотел бы собрать следующие массивы и рассчитать лучшие цены.

$pricesForAllCustomer = array(
    array(
        'from' => '600',
        'to' => 'any',
        'price' => 0.15
    )
);
$customerSpecificPrices = array (
    array(
        'from' => '1',
        'to' => '1799',
        'price' => 0.17
    ),
    array(
        'from' => '1800',
        'to' => 'any',
        'price' => 0.14
    )
);

Как можно объединить эти 2 массива для достижения следующего результата?

$calculatedBestOffers = array(
    array(
        'from' => '1',
        'to' => '599',
        'price' => 0.17
    ),
    array(
        'from' => '600',
        'to' => '1799',
        'price' => 0.15
    ),
    array(
        'from' => '1800',
        'to' => 'any',
        'price' => 0.14
    )
);

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Один из способов сделать это - найти элемент, значение которого from больше pricesForAllCustomer to, и поместить его между этими элементами (при условии, что customerSpecificPrices уже упорядочен.):

$pricesForAllCustomer = array(
    array(
        'from' => '600',
        'to' => 'any',
        'price' => 0.15
    )
);

$customerSpecificPrices = array (
    array(
        'from' => '1',
        'to' => '1799',
        'price' => 0.17
    ),
    array(
        'from' => '1800',
        'to' => 'any',
        'price' => 0.14
    )
);

$calculatedBestOffers = [];
$foundPos = false;
foreach($customerSpecificPrices as $key => $elem){
    if(!$foundPos && $pricesForAllCustomer[0]['from'] < $elem['from']){
        $calculatedBestOffers[$key-1]['to'] = $pricesForAllCustomer[0]['from']-1;
        $pricesForAllCustomer[0]['to'] = $elem['from']-1;
        $calculatedBestOffers[] = $pricesForAllCustomer[0];
        $calculatedBestOffers[] = $elem;
        $foundPos = true;
    }
    else $calculatedBestOffers[] = $elem;
}

print_r($calculatedBestOffers);

Результат будет:

Array
(
    [0] => Array
        (
            [from] => 1
            [to] => 599
            [price] => 0.17
        )

    [1] => Array
        (
            [from] => 600
            [to] => 1799
            [price] => 0.15
        )

    [2] => Array
        (
            [from] => 1800
            [to] => any
            [price] => 0.14
        )

)
0 голосов
/ 02 ноября 2019

Используйте array_push(), оно будет помещать данное значение в массив.

array_push($pricesForAllCustomer,$customerSpecificPrices);

оно возвратит объединенное значение следующим образом,

Array ( [0] => Array ( [from] => 600 [to] => any [price] => 0.15 ) [1] => Array ( [0] => Array ( [from] => 1 [to] => 1799 [price] => 0.17 ) [1] => Array ( [from] => 1800 [to] => any [price] => 0.14 ) ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...