Сравнение двух массивов php

Рейтинг: 0Ответов: 1Опубликовано: 21.03.2023

Помогите пожалуйста разобраться с массивами. Уже битый час мучаюсь, не могу никак придумать как из двух массивов данных получить результаты. Пишу на php. Первый массив:

array(
array(
    "id"=> "1", 
    "name"=> "test", 
    "count"=> 15
    ), 
array(
    "id"=> "2", 
    "name"=> "test2", 
    "count"=> 8
    ), 
array(
    "id"=> "3", 
    "name"=> "test3", 
    "count"=> 0
    )
)

Второй массив:

array(
array(
    "id_pos" => "a1",
    "id" => "1", 
    "count" => 10
    ), 
array(
    "id_pos" => "a1",
    "id" => "1", 
    "count" => 10
    ), 
array(
    "id_pos" => "a2",
    "id" => "2", 
    "count" => 5
    ),
array(
    "id_pos" => "a3",
    "id" => "3", 
    "count" => 2
    )
array(
    "id_pos" => "a4",
    "id" => "4", 
    "count" => 20
)

Суть вопроса: Есть массив с данными id и count, id уникален. Есть второй массив, в котором уникален id_pos, нужно по id найти count в первом массиве и перенести с измененным count в третий массив. Загвоздка в том что таких id во втором массиве может быть несколько, соответственно нужно распределить count из первого массива на все одинаковые id во втором. Так же если count в первом массиве равно 0 тогда этот подмассив нужно перенести в четвертый массив. И если id из второго массива не находится в первом, значит переносится в третий массив неизменным. На выходе должно получится что то типа:

array(
array(
    "id_pos" => "a1",
    "id" => "1", 
    "count" => 10
    ), 
array(
    "id_pos" => "a1",
    "id" => "1", 
    "count" => 5
    ), 
array(
    "id_pos" => "a2",
    "id" => "2", 
    "count" => 8
    ),
array(
    "id_pos" => "a4",
    "id" => "4", 
    "count" => 20
)

четвертый массив:

array(
    array(
        "id_pos" => "a3",
        "id" => "3", 
        "count" => 0
    )
)

Ответы

▲ 0
$array1 = [
    ["id"=> "1", "name"=> "test", "count"=> 15], 
    ["id"=> "2", "name"=> "test2", "count"=> 8], 
    ["id"=> "3", "name"=> "test3", "count"=> 0]
];

$array2 = [
    ["id_pos" => "a1", "id" => "1", "count" => 10], 
    ["id_pos" => "a1", "id" => "1", "count" => 10], 
    ["id_pos" => "a2", "id" => "2", "count" => 5], 
    ["id_pos" => "a3", "id" => "3", "count" => 2],
    ["id_pos" => "a4", "id" => "4", "count" => 20]
];

$array3 = [];
$array4 = [];

foreach ($array2 as $item2) {
    $found = false;
    foreach ($array1 as &$item1) {
        if ($item2['id'] === $item1['id']) {
            if ($item1['count'] > 0) {
                $count_per_item = ceil($item1['count'] / count($found));
                $item1['count'] -= $count_per_item;
                $item3 = [
                    "id_pos" => $item2['id_pos'],
                    "id" => $item2['id'],
                    "count" => $count_per_item
                ];
                $array3[] = $item3;
                $found[] = true;
            } else {
                $item4 = [
                    "id_pos" => $item2['id_pos'],
                    "id" => $item2['id'],
                    "count" => 0
                ];
                $array4[] = $item4;
                $found[] = true;
            }
            continue 2;
        }
    }
    $array3[] = $item2;
}

unset($item1);

var_dump($array3);
var_dump($array4);