Как удалить элемент doubles в foreach l oop и сохранить дату, назначенную оригиналу? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь удалить повторяющиеся значения в поле Rest, но я хочу назначить / сохранить его дату в оригинале. element:

array (size=413)
  0 => 
    array (size=5)
      'Date' => 
        array (size=1)
          0 => int 1588520980
      'Rest' => 123abc
  1 => 
    array (size=5)
      'Date' => 
        array (size=1)
          0 => int 1588520981
      'Rest' => qwe123
  2 => 
    array (size=5)
      'Date' => 
        array (size=1)
          0 => int 1588520983
      'Rest' => qwe123

Пробую, но не работает

public function find_repeats($arr)
{
    foreach(array_column($arr, 'Rest') as $ckey=>$value) {

        $keys = array_reverse(array_keys(array_column($arr, 'Rest'), $value));

        foreach ($keys as $v) {

            if ($ckey != $v && isset($arr[$v]))
            {
                $arr[$ckey]['Date'][] = $arr[$v]['Date'][0];
                unset($arr[$v]);
            }
        }

    }

    return $arr;
}

Вот как должна выглядеть таблица после этой операции

array (size=413)
  0 => 
    array (size=5)
      'Date' => 
        array (size=1)
          0 => int 1588520980
      'Rest' => 123abc
  1 => 
    array (size=5)
      'Date' => 
        array (size=1)
          0 => int 1588520981
          1 => int 1588520983
      'Rest' => qwe123

Спасибо за помощью! :)

1 Ответ

1 голос
/ 09 мая 2020

Простое решение без всех этих сложенных функций:

$newData = [];
foreach ($arr as $item) {
    $rest = $item['Rest'];

    if (!isset($newData[$rest])) {
        $newData[$rest] = $item;
    } else {
        $newData[$rest]['Date'][] = $item['Date'][0];
    }
}
// optionally apply array_values to get 0-indexed array:
$newData = array_values($newData);
...