Как вставить элементы в существующий массив - PullRequest
0 голосов
/ 30 мая 2019

Предположим, у меня есть два массива, как показано ниже

array:2 [
  0 => {#1995
    +"id": 6
    +"sales_target_amount": "30000.00"
  }
  1 => {#1996
    +"id": 10
    +"sales_target_amount": "1000.00"
  }
]

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

array:2 [
  0 => {#1994
    +"sales_total": "4165.80"
    +"staff_id": 6
  }
  1 => {#1513
    +"sales_total": "1335.60"
    +"staff_id": 10
  }
]

Я пытаюсь вставить первый массив sales_target_amount во второй массив, если id соответствует staff_id.

код

  $sum = array_merge($second_array[],$firs_array);

Приведенный выше код объединит два массива вместе, но не вставит элементы на основе идентификатора.

Ожидаемый результат

array:2 [
      0 => {#1994
        +"sales_total": "4165.80"
        +"staff_id": 6
        +"sales_target_amount": "30000.00"
      }
      1 => {#1513
        +"sales_total": "1335.60"
        +"staff_id": 10
        +"sales_target_amount": "1000.00"
      }
    ]

Ответы [ 4 ]

1 голос
/ 30 мая 2019

Вот фрагмент, объяснение см. Во встроенном документе

$arr = [
    0 => ["sales_total" => "4165.80", "staff_id" => 6],
    1 => ["sales_total" => "1335.60", "staff_id" => 10],
];
$arr1 = [
    0 => ["id" => 6, "sales_target_amount" => "30000.00"],
    1 => ["id" => 10, "sales_target_amount" => "1000.00"],
];
//NULL to return complete arrays or objects and staff id will be key
$arr = array_column($arr, null, 'staff_id');
// mapping id sales target amount combination
$temp = array_column($arr1, 'sales_target_amount', 'id');
foreach ($arr as $key => $value) {
    $arr[$key]['sales_target_amount'] = $temp[$key]; // putting sales_target_amount for id
}

array_column - вернуть значения из одного столбца во входном массиве

Демо-ссылка .

0 голосов
/ 30 мая 2019

Сортировать ответ, используя эту библиотеку

$array = array_merge_recursive(
  Arr::flattenSingle(Arr::group($array1, 'id')), 
  Arr::flattenSingle(Arr::group($array2, 'staff_id'))
);

Для этого нужно сначала сгруппировать массивы по столбцу, с которым вы хотите, чтобы они были объединены.Тогда, потому что каждый элемент в группе будет иметь только один соответствующий массив (потому что они сгруппированы по уникальному идентификатору), сгладить эти группы, чтобы построить массив с элементами, такими как id => array_with_that_id.А затем объединить эти сплющенные группы по ключам, которые в данном случае являются идентификаторами.

В целом это даст

Array (
  [6] => Array (
    [id] => 6
    [sales_total] => 4165.8
    [staff_id] => 6
    [sales_target_amount] => 30000
  )
  [10] => Array (
    [id] => 10
    [sales_total] => 1335.6
    [staff_id] => 10
    [sales_target_amount] => 1000
  ) 
)
0 голосов
/ 30 мая 2019

array_merge () не работает с многомерным массивом.Попробуйте использовать array_merge_recursive ().

И вам не нужно использовать квадратные скобки в этом контексте.Функция запуска, как и

$sum = array_merge_recursive($second_array, $firs_array);
0 голосов
/ 30 мая 2019

Использовать хешированную карту для группировки значений по staff_id

<?php
$arr1 = [
    [
        'id' => 6,
        'sales_target_amount' => '30000.00'
    ],
    [
        'id' => 10,
        'sales_target_amount' => '1000.00'
    ]
];

$arr2 = [
    [
        'sales_total' => '4165.80',
        'staff_id' => 6
    ],
    [
        'sales_total' => '1335.60',
        'staff_id' => 10
    ]
];

$results = [];

foreach ($arr1 as $value) {
    $results[$value['id']] = [
        'sales_target_amount' => $value['sales_target_amount']
    ];
}

foreach ($arr2 as $value) {
    $results[$value['staff_id']] = array_merge($results[$value['staff_id']], $value);
}

print_r(array_values($results));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...