Я хочу объединить массив, если то же значение - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь объединить несколько массивов по значениям времени.У меня есть такой массив.Я хочу объединить массив 2, я использую array_merge

Array_one :   
     [
           {
              date:"2018-06-23",
              size:"L",
              type:"shoes",
              value_one:"66"
           },
          {
              date:"2018-06-23",
              size:"XL",
              type:"shirt",
              value_one:"43"
           },
          {
              date:"2018-06-23",
              size:"M",
              type:"Bag",
              value_one:"23"
           }
        ]


Array_two :
[
   {
      date:"2018-06-23",
      size:"L",
      type:"shoes",
      value_two:"28"
   },
  {
      date:"2018-06-23",
      size:"XL",
      type:"shirt",
      value_two:"56"
   },
  {
      date:"2018-06-23",
      size:"M",
      type:"Bag",
      value_two:"14"
   },
  {
      date:"2018-06-23",
      size:"S",
      type:"Cap",
      value_two:"29"
   }
]

Мне нужно объединить этот массив 2 со значениями y, если дата индекса, размер, введите его слияние.Например, после объединения массивы должны быть такими:

Array_final :
    [
           {
              date:"2018-06-23",
              size:"L",
              type:"shoes",
              value_one:"66",
              value_two:"28"
           },
          {
              date:"2018-06-23",
              size:"XL",
              type:"shirt",
              value_one:"43",
              value_two:"56"
           },
          {
              date:"2018-06-23",
              size:"M",
              type:"Bag",
              value_one:"23",
              value_two:"14"
           },
           {
              date:"2018-06-23",
              size:"S",
              type:"Cap",
              value_one:"null",
              value_two:"29"
           }
        ]

что мне делать в этом случае?Я хочу решить этот случай с php, laravel или коллекцией класса "Laravel".Пожалуйста, помогите мне.

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

Вы можете попробовать это: -

$final = $arr1; // default get all values from first array
foreach ($arr2 as $value) { // loop through second array to match
    $flag = 0;
    foreach ($final as $key => $data) {
        // Check for date, size and type
        if ($data['date']===$value['date'] && $data['size']===$value['size'] && $data['type']===$value['type']) {
            $final[$key]['value_two'] = $value['value_two'];
            $flag = 1;
            break;
        }
    }
    if ($flag === 0) { // If similar not found, then add new one
        array_push($final, $value);
    }
}
print_r($final);

Выход: -

Array
(
    [0] => Array
        (
            [date] => 2018-06-23
            [size] => L
            [type] => shoes
            [value_one] => 66
            [value_two] => 28
        )

    [1] => Array
        (
            [date] => 2018-06-23
            [size] => XL
            [type] => shirt
            [value_one] => 43
            [value_two] => 56
        )

    [2] => Array
        (
            [date] => 2018-06-23
            [size] => M
            [type] => Bag
            [value_one] => 23
            [value_two] => 14
        )

    [3] => Array
        (
            [date] => 2018-06-23
            [size] => S
            [type] => Cap
            [value_two] => 29
        )

)

Ссылка Fiddle: - https://3v4l.org/fSh1V

0 голосов
/ 25 сентября 2018

попробуй

    //both arrays will be merged including duplicates
    $result = array_merge( $array1, $array2 );
    //duplicate objects will be removed
    $result = array_map("unserialize", array_unique(array_map("serialize", $result)));
    //array is sorted on the bases of id
    sort( $result );
0 голосов
/ 25 сентября 2018

попробуй

var result = a1.slice(0);

for (var i = 0 ; i < result.length ; i++){
  for (var j = 0; j < a2.length ; j++){
    if (result[i]. date == a2[j]. date && result[i]. size == a2[j]. size && result[i]. type == a2[j]. type){
      result[i]. value_one = a2[j]. value_one;
      result[i]. value_two = a2[j].value_two;
    }
  };  
};
console.log(result);
0 голосов
/ 25 сентября 2018

Вы можете попробовать это

$Array_final= [];
foreach ($Array_one as $key1 => $value1) {
    foreach ($Array_two as $key2 => $value2) {
        if ($value1['date']==$value2['date']) {
            $Array_final[]=$value2+$value1;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...