За последние 24 часа нас посетили 17397 программистов и 1684 робота. Сейчас ищет 1781 программист ...

Собрать два массива типа "дерево"

Тема в разделе "PHP для новичков", создана пользователем Leonid, 9 авг 2018.

  1. Leonid

    Leonid Новичок

    С нами с:
    30 апр 2018
    Сообщения:
    15
    Симпатии:
    0
    PHP:
    1. <?php
    2.  
    3. /*
    4. вывести массив вида
    5. Array
    6. (
    7.     [0] => Array
    8.         (
    9.             [id] => 1
    10.             [name] => мистер джонсон
    11.             [students] => Array
    12.                 (
    13.                     [0] => Вика
    14.                 )
    15.  
    16.         )
    17.  
    18.     [1] => Array
    19.         (
    20.             [id] => 2
    21.             [name] => мистер смит
    22.             [students] => Array
    23.                 (
    24.                     [0] => Katya
    25.                     [1] => Fedor
    26.                     [2] => Max
    27.                 )
    28.  
    29.         )
    30.  
    31.     [2] => Array
    32.         (
    33.             [id] => 4
    34.             [name] => Vasya
    35.             [students] => Array
    36.                 (
    37.                     [0] => Regina
    38.                 )
    39.  
    40.         )
    41.  
    42. )
    43. */
    44.  
    45. $arNames = [
    46.     [
    47.         'id' => '2',
    48.         'name' => 'Вика',
    49.         'prof' => '1',
    50.     ],
    51.     [
    52.         'id' => '4',
    53.         'name' => 'Katya',
    54.         'prof' => '2',
    55.     ],
    56.     [
    57.         'id' => '3',
    58.         'name' => 'Regina',
    59.         'prof' => '4',
    60.     ],
    61.     [
    62.         'id' => '5',
    63.         'name' => 'Fedor',
    64.         'prof' => '2',
    65.     ],
    66.     [
    67.         'id' => '8',
    68.         'name' => 'Max',
    69.         'prof' => '2',
    70.     ]
    71. ];
    72.  
    73. $arProf = [
    74.     '0' =>
    75.         [
    76.             'id' => '1',
    77.             'name' => 'мистер джонсон',
    78.         ],
    79.        
    80.     '1' =>
    81.         [
    82.             'id' => '2',
    83.             'name' => 'мистер смит',
    84.         ],
    85.        
    86.        
    87.        
    88.     '2' =>
    89.         [
    90.             'id' => '4',
    91.             'name' => 'Vasya',
    92.         ]
    93. ];


    Вот набросок, всё что смог:
    PHP:
    1. foreach ($arNames as $key => $value ):
    2.     $value = [
    3.     [
    4.         'id' => $arProf['id'],
    5.         'name' =>$arProf['name'],
    6.         'student' =>    $arStedents = [
    7.            
    8.         ]
    9.     ],
    10. ];
    11. print_r($value);
    12. endforeach;
     
  2. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Вместо студентов профессоров?
    PHP:
    1. $result = [];
    2.  
    3. foreach($arrNames as $name) {
    4.  foreach($arrProf as $prof) {
    5.   if($name['prof'] == $prof['id']) {
    6.      $tmp = $name;
    7.      $tmp['prof'][] = $prof['name'];
    8.      $result[] = $tmp;
    9.   }
    10.  }
    11. }
    12.  
    13. var_dump($result);
     
    Leonid нравится это.
  3. Leonid

    Leonid Новичок

    С нами с:
    30 апр 2018
    Сообщения:
    15
    Симпатии:
    0
    Только нужно же наоборот, собрать кто студент у учителя. Сделал поправку $tmp['prof'][] = $prof['name']; на $tmp[]['prof'] = $prof['name'];
    --- Добавлено ---
    Да и плюс собираются массивы правильно, по id, но собираются онипо отдельности. А надо чтоб у профессора было несколько студентов
     
  4. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    ну так разверни работу циклов и перед 7-й строкой добавь
    PHP:
    1. $tmp['prof'] = [];
     
  5. Leonid

    Leonid Новичок

    С нами с:
    30 апр 2018
    Сообщения:
    15
    Симпатии:
    0
    Да и плюс собираются массивы правильно, по id, но собираются они
    PHP:
    1.  $result = array();
    2. foreach($arProf as $prof) {
    3. foreach($arNames as $name) {
    4.      $tmp = $prof;
    5.    if($name['prof'] == $prof['id']) {
    6.      $tmp['student'][] = $name['name'];
    7.     $result[] = $tmp;
    8.   }
    9. }
    10. }
    развернул, но собрать не получается как нужно