За последние 24 часа нас посетили 22774 программиста и 1311 роботов. Сейчас ищут 967 программистов ...

Сортировка данных внутри массива

Тема в разделе "Сделайте за меня", создана пользователем emelyan, 12 май 2024.

  1. emelyan

    emelyan Новичок

    С нами с:
    12 май 2024
    Сообщения:
    1
    Симпатии:
    0
    Не догоняю как решить это
    Задание:
    PHP:
    1. $test = [
    2.  ['id' => 1, 'name' => 'test1', 'docId' => 1],
    3.  ['id' => 1, 'name' => 'test1', 'docId' => 3],
    4.  ['id' => 2, 'name' => 'test2', 'docId' => 4],
    5.  ['id' => 2, 'name' => 'test2', 'docId' => 6],
    6.  ['id' => 3, 'name' => 'test3', 'docId' => 2]
    7. ];
    Результат:
    PHP:
    1.  $result = [
    2.  [
    3.   'id' => 1,
    4.   'name' => 'test1',
    5.   'docId' => [1,3]
    6.  ],
    7.  [
    8.   'id' => 2,
    9.   'name' => 'test2',
    10.   'docId' => [4,6]
    11.  ],
    12.  [
    13.   'id' => 3,
    14.   'name' => 'test3',
    15.   'docId' => [2]
    16.  ],
    17. ];
     
    #1 emelyan, 12 май 2024
    Последнее редактирование модератором: 13 май 2024
  2. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    77
    Симпатии:
    15
    id подразумевает уникальность. Сортируй по docId
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    332
    Симпатии:
    66
    Адрес:
    Бавария, Германия
    Добрый день!
    В Вашем конкретном случае (данные в массиве $test отсотированы ) можно сделать так
    PHP:
    1. foreach($test as $row){
    2.     $id = $row['id'];
    3.     $buf[$id]['id'] = $id;
    4.     $buf[$id]['name'] = $row['name'];
    5.     $buf[$id]['docId'][] = $row['docId'];
    6. }
    7.  
    8. $result = [];
    9.  
    10. foreach($buf as $row)
    11.     $result[] = $row;
    Если массив $test будет, например, такой
    PHP:
    1. $test = [
    2. ['id' => 2, 'name' => 'test2', 'docId' => 6],
    3. ['id' => 3, 'name' => 'test3', 'docId' => 2],
    4. ['id' => 1, 'name' => 'test1', 'docId' => 1],
    5. ['id' => 2, 'name' => 'test2', 'docId' => 4],
    6. ['id' => 1, 'name' => 'test1', 'docId' => 3]
    7. ];
    то можно сделать так
    PHP:
    1. foreach($test as $row){
    2.     $id = $row['id'];
    3.     $buf[$id]['name'][] = $row['name'];
    4.     $buf[$id]['docId'][] = $row['docId'];
    5. }
    6.  
    7. ksort($buf);
    8.  
    9. $result = [];
    10.  
    11. foreach($buf as $id => $row){
    12.     foreach($row as $k => $v){
    13.         $row[$k] = array_unique($v);
    14.         sort($row[$k]);
    15.     }
    16.     $result[] = array_merge(['id'=> $id], $row);
    17. }
    В обоих случаях Вы получите требуемый результат
    PHP:
    1. $result Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [id] => 1
    6.             [name] => test1
    7.             [docId] => Array
    8.                 (
    9.                     [0] => 1
    10.                     [1] => 3
    11.                 )
    12.  
    13.         )
    14.  
    15.     [1] => Array
    16.         (
    17.             [id] => 2
    18.             [name] => test2
    19.             [docId] => Array
    20.                 (
    21.                     [0] => 4
    22.                     [1] => 6
    23.                 )
    24.  
    25.         )
    26.  
    27.     [2] => Array
    28.         (
    29.             [id] => 3
    30.             [name] => test3
    31.             [docId] => Array
    32.                 (
    33.                     [0] => 2
    34.                 )
    35.  
    36.         )
    37.  
    38. )
    Удачи!