Как подготовить новый массив из двух массивов внутри цикла foreach? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь сравнить ключи массива со значениями другого массива. В случае больших значений текущего ключа, я хотел бы перенести значение в новый массив. Затем я хочу вставить все собранные значения для этого конкретного ключа в таблицу БД.

Это мои входные массивы:

$productlist = [result] => Array
    (
        [0] => Array
            (
                [configoption1] => 2M
                [id] => 96 

            )
        [1] => Array
            (
                [configoption1] => 5M
                [id] => 97
             )
        [2] => Array
            (
                [configoption1] => 15M
                [id] => 98
            )
        [3] => Array
            (
                [configoption1] => 30M
                [id] => 99
             )
    )

$myplans = Array
        (
            [2M] => Array
                (
                    [price] => 10
                )
            [5M] => Array
                (
                    [price] => 10
                )
            [15M] => Array
                (
                    [price] => 10
                )
            [30M] => Array
                (
                    [price] => 10
                )
        )

Вот мой пример кода:

$upgradelist = array()

foreach ($myplans as $plan => $data) {

    foreach($productlist['result'] as $key=>$value){
        if($plan == 'ENTERPRISE'){
            //no higher plans than Enterprise
        }else{

            $plan1 = (int)substr_replace($plan, "", -1);

            $value['configoption1'] = (int)substr_replace($value['configoption1'], "", -1);
            #echo " configconfig=> ".$value['configoption1'];

            if($plan > $value['configoption1']){
                $upgrade_product_ids[$plan][] = $value['id'];
            }
        }
    }


    //insert upgrade products list
    if(!empty($upgradelist)){
        foreach($upgradelist as $key => $upgrade_product_id){
            #$insert_stmt_upgradeproduct = <insert statement> for each $plan
        }
    }
}

ожидаемый результат каждый раз, когда я выхожу из цикла foreach:> foreach ($ productlist ['result']

$upgradelist = Array
(
    [2] => Array
        (
            [0] => 97 //5M
            [1] => 98 //15M
            [2] => 99 //30M
        )
)

$upgradelist = Array
(
    [5] => Array
        (
            [0] => 98
            [1] => 99
        )

)

$upgradelist = Array
(

    [15] => Array
        (
            [0] => 99
        )
)

$upgradelist = Array
(

    [30] => Array
        (

        )
)

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

ВЫ можете сделать так

<?php
 $myArray = [];
$myArray['result'] = array(
array("configoption1" => "2m", "id" => 96),
array("configoption1" => "5m", "id" => 97),
array("configoption1" => "15m", "id" => 98),
array("configoption1" => "30m", "id" => 99)
);
 //print_r($myArray);

$myArray2 =[
"2m" => ["price" => 10],
 "5m" => ["price" => 10],
 "15m" => ["price" => 10],
 "30m" => ["price" => 10]
];

$resultArray = [];
foreach($myArray2 as $key => $values) {

$keyNum = (int)$key;
$newTempArray[$keyNum] = [];
foreach($myArray['result'] as $newresult) {
    $configoption1Num = (int)$newresult['configoption1'];
    if($configoption1Num > $keyNum) {
        array_push($newTempArray[$keyNum], $newresult['id']);
    }
}

print_r($newTempArray[$keyNum]);
echo "<br>";
}

http://sandbox.onlinephpfunctions.com/code/008c839fb4fad4ed2aceae7c4ed1220579e8e318

0 голосов
/ 08 апреля 2019

Вы можете решить, как показано ниже:

foreach($myplans as $key => $plan) {
   $data_to_be_inserted = [];
   foreach($productlist['result'] as $product) {
       if ($key > $product['configoption1']) {
           $data_to_be_inserted [] = $product['id'];
       }
   }
   if (count($data_to_be_inserted)) {
      //insert into database(expected value will be available here)
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...