PHP разбивает массив на 2 массива по значению - PullRequest
0 голосов
/ 07 июня 2018

Мне трудно понять, как это реализовать, и вот оно.У меня есть массив

$arr = array("purchase_order_details_id"=>array(
               0=>"POD1",
               1=>"POD1",
               2=>"POD2",
           ),
            "quantity_received"=>array(
               0=>5,
               1=>10,
               2=>20
            )
         );

Я хочу разделить массивы на две части.Примерно так.

$pod_2 = array("purchase_order_details_id"=>array(
       0=>"POD1",
       1=>"POD1"
       ),
       "quantity_received"=>array(
       0=>5,
       1=>10
       ));

$pod_1 = array("purchase_order_details_id"=>array(
       2=>"POD2"
       ),
       "quantity_received"=>array(
       2=>20
       ));

У кого-нибудь есть идеи, как это сделать?Любые мысли приветствуются.Спасибо

Ответы [ 3 ]

0 голосов
/ 07 июня 2018
foreach ($arr as $key => $val) {
    $size = ceil(count($val) / 2);

    $arr2 = array_chunk($val, $size, true);

    $pod_2[$key] = $arr2[0];
    $pod_1[$key] = $arr2[1];
}

var_dump($pod_2);
var_dump($pod_1);
0 голосов
/ 07 июня 2018

Я использую array_intersect, чтобы найти PO в цикле уникальных PO.
Затем я использую array_inyersect_key, чтобы получить количество.
Для этого требуется всего одна итерация для каждого уникального Purchase_order_detali_id.
Это означает, что он намного лучшепроизводительность, чем зацикливание полного массива.

Редактировать: добавлен экстракт для создания двух переменных.Но я бы предпочел оставить их в массиве, если бы я был тобой.

$pods = array_unique($arr["purchase_order_details_id"]);

Foreach($pods as $pod){
    $PO = array_intersect($arr["purchase_order_details_id"], [$pod]);
    $qt = array_intersect_key($arr["quantity_received"], $PO);
    $new[$pod] = ["purchase_order_details_id" => $PO, "quantity_received" => $qt];
}
Var_dump($new);
extract($new);

https://3v4l.org/dBpuJ

0 голосов
/ 07 июня 2018

Попробуйте с кодом ниже:

<code>$array = array();   
foreach($arr['purchase_order_details_id'] as $key => $val)
{
    $array[$val]['purchase_order_details_id'][] = $val;
    $array[$val]['quantity_received'][] = $arr['quantity_received'][$key];
}

echo "<pre>";
    print_r($array);
echo "
"; извлечение (массив $); эхо"
";
    print_r($POD1);
echo "
"; эхо"
";
    print_r($POD2);
echo "
";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...