Как найти дубль в массиве и отфильтровать большее значение?

184
08 июня 2018, 11:50

Есть массив

array (size=3)
  0 => 
    array (size=7)
      0 => string 'минус 10% скидка' (length=30)
      1 => string 'b9657352-a675-11e7-aed4-60a44c3d76ed' (length=36)
      2 => string '10' (length=2)
      3 => string 'Скидка (наценка) процентом' (length=48)
      4 => string '2018-05-24' (length=10)
      5 => string '2018-05-31' (length=10)
      6 => string 'сапог B3 коричневый' (length=34)
  1 => 
    array (size=7)
      0 => string 'минус 22% скидка2' (length=28)
      1 => string '00000000-0000-0000-0000-000000000000' (length=36)
      2 => string '22' (length=2)
      3 => string 'Скидка (наценка) процентом' (length=48)
      4 => string '2018-05-06' (length=10)
      5 => string '2018-06-01' (length=10)
      6 => string 'сапог Ф красный' (length=28)
  2 => 
    array (size=7)
      0 => string 'минус 22% скидка2' (length=28)
      1 => string 'b9657352-a675-11e7-aed4-60a44c3d76ed' (length=36)
      2 => string '22' (length=2)
      3 => string 'Скидка (наценка) процентом' (length=48)
      4 => string '2018-05-06' (length=10)
      5 => string '2018-06-01' (length=10)
      6 => string 'сапог B3 коричневый' (length=34)

Подскажите каким путем идти лучше. Необходимо найти дублирующее значение (в примере 'b9657352-a675-11e7-aed4-60a44c3d76ed') и оставить только тот массив из найденного дубля, в котором значение array[2] будет максимальным.

Т.е должно остаться вот так:

array (size=2)
  0 => 
    array (size=7)
      0 => string 'минус 22% скидка2' (length=28)
      1 => string '00000000-0000-0000-0000-000000000000' (length=36)
      2 => string '22' (length=2)
      3 => string 'Скидка (наценка) процентом' (length=48)
      4 => string '2018-05-06' (length=10)
      5 => string '2018-06-01' (length=10)
      6 => string 'сапог Ф красный' (length=28)
  1 => 
    array (size=7)
      0 => string 'минус 22% скидка2' (length=28)
      1 => string 'b9657352-a675-11e7-aed4-60a44c3d76ed' (length=36)
      2 => string '22' (length=2)
      3 => string 'Скидка (наценка) процентом' (length=48)
      4 => string '2018-05-06' (length=10)
      5 => string '2018-06-01' (length=10)
      6 => string 'сапог B3 коричневый' (length=34)
Answer 1
// создадим результирующий массив
$result = [];
// $src_array это ваш исходный массив    
foreach($src_array as $item){
    // назовем уникальную последовательность символов "КЛЮЧОМ"
    // (uub9657352-a675-11e7-aed4-60a44c3d76ed) и будем собирать результирующий
    // массив с этой последовательностью в качестве ключа
    $key = $item[1];
    // а значение для сравнения назовем "ЗНАЧЕНИЕМ"
    $value = $item[2];
    // будем добавлять текущий элемент в результирующий массив в том случае,
    // если элемента с таким КЛЮЧОМ еще нет, и будем обновлять элемент
    // результирующего массива с таким ключом, если ЗНАЧЕНИЕ текущего элемента
    // больше
    // при этом не важно сколько "дублей" было в исходном массиве 2 или 200, в
    // результате останется элемент с наивысшем ЗНАЧЕНИЕМ
    if(!array_key_exists($key, $result) || $value > $result[$key][2]){
        $result[$key] = $item;
    }
}
var_dump($result);
READ ALSO
Количество пробелов от начала строки до начала текста

Количество пробелов от начала строки до начала текста

Как вычислить количество пробелов от начала строки до начала текста с помощью php? Интересует решение в одну строкуПример строки :

171
Переписать устаревший MySQL на PDO/MySQLi

Переписать устаревший MySQL на PDO/MySQLi

Ниже вы видите код c устаревшим mysql, помогите это все изменить в PDO или mysqliСамая основная головная боль это то, что я не могу сделать рабочие...

204
Заменить %20 в xfsearch DLE

Заменить %20 в xfsearch DLE

Как заменить %20 в xfsearch на - в ссылке поиска по допполю

224
Выход из аккаунта

Выход из аккаунта

Есть статья с готовым кодом для регистрации и авторизации аккаунта: https://htmlwebru/php/example/avtorizacija2

192