PHP - убрать дубли в массиве по 3 ключам

126
04 ноября 2019, 05:10

Есть массив

Array ( 
[0] => Array ( [msisdn] => 79112221122 [called] => 7234346383 [dates] => 2018050108 [duration] => 13 ) 
[1] => Array ( [msisdn] => 79112221122 [called] => 7234346383 [dates] => 2018050108 [duration] => 12 )
) 

Нужно убрать дубли по 3 ключам.
Т.е если ["msisdn"] и ["called"] и ["dates"] одинаковые, то оставляем из этих элементов массива только один (какой не важно первый или второй). Т.е нужно как бы выполнить array_unique, но только для ["msisdn"] и ["called"] и ["dates"]. Правда может быть и более двух дублей таких элементов массиве.

Answer 1
$used = [];
$output = array_filter($input, function ($value) use(&$used){
    $key = $value['msisdn'].$value['called'].$value['dates'];
    if(isset($used[$key])) return false;
    return $used[$key] = true;
});
Answer 2

Можно, сначала посчитать хэш для необходимых полей, а потом по их индексам сделать выборку из начального массива

$test = [
    ["msisdn"   => 1,
     "called"   => 2,
     "dates"    => 3,
     "duration" => 13,
    ],
    ["msisdn"   => 1,
     "called"   => 2,
     "dates"    => 3,
     "duration" => 12,
    ],
    ["msisdn"   => 1,
     "called"   => 0,
     "dates"    => 3,
     "duration" => 12,
    ],
  ];
  $test_array = [];
  foreach ($test as $key => $test_item) {
    $test_array[$key] = hash(
      'tiger192,3',
      $test_item['msisdn'].$test_item['called'].$test_item['dates']);
  }
  $result_index = array_unique($test_array);
  $result_array = [];
  foreach ($result_index as $result_key => $result_item) {
    echo $result_key . "<br>";
    $result_array[$result_key] = $test[$result_key];
  }

  echo "<pre>";
  print_r($result_array);
  echo "</pre>";
Answer 3
function unique_multidim_array($array, $key) { 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array(); 
    foreach($array as $val) { 
        if (!in_array($val[$key], $key_array)) { 
            $key_array[$i] = $val[$key]; 
            $temp_array[$i] = $val; 
        } 
        $i++; 
    } 
    return $temp_array; 
}
READ ALSO
Причина ошибки?

Причина ошибки?

Fatal error: Uncaught Error: Using $this when not in object context in H:\OSPanel\domains\KingKino\indexphp:13 Stack trace: #0 H:\OSPanel\domains\KingKino\index

109
Как правильно сформировать PHP запрос в UNISENDER

Как правильно сформировать PHP запрос в UNISENDER

В документации по сабжу есть пример создания списка $result=$uni->createList(Array("title"=>"OurNewList")); Я настроил свои - работаетЗначит подключение настроено...

107
Не могу разобраться с создание запроса sql

Не могу разобраться с создание запроса sql

Я не силен в sql поэтому не могу понять куда копать и реально ли такой запрос создать?

115
Вывод своей ячейки в корзине Woocommerce

Вывод своей ячейки в корзине Woocommerce

уже неделю мучаюсь не могу не как найти решение! =( Проблема в следующем - есть интернет магазин на Woocommerce в базе данных я создал новый столбец...

100