За последние 24 часа нас посетили 22092 программиста и 989 роботов. Сейчас ищут 779 программистов ...

Ассоциативный массив

Тема в разделе "PHP для новичков", создана пользователем inter1c, 21 янв 2017.

  1. inter1c

    inter1c Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    На входе файл csv

    Код (Text):
    1.  
    2. Иванов Иван Иванович;100;8-xxx-xxx-xx-xx;Руководство
    3. Петров Петр Алексеевич;101;8-xxx-xxx-xx-xx;Руководство
    4. Сидоров Петр Алексеевич;103;8-xxx-xxx-xx-xx;Сантехники
    5. Михайлов Станислав Сергеевич;122;8-xxx-xxx-xx-xx;Грузчики
    6. Осокин Михаил Александрович;111;8-xxx-xxx-xx-xx;Сантехники
    7. Михайлов Леонид Ильич;117;8-xxx-xxx-xx-xx;Руководство
    8. Леонидов Марк Арнольдович;124;8-xxx-xxx-xx-xx;Грузчики
    Начинаю его разбирать, группировать по отделам

    Код (Text):
    1. <?php
    2. $fn = $_POST['fn'];
    3. $x=file (__DIR__.'\\'.$fn); ///csv файл, разделенной запятыми
    4. if (empty($x)){
    5.     echo "Неверное имя файла";
    6.     die();
    7. }
    8.  
    9.  
    10. $first = array();
    11. foreach ($x as $i) {
    12.     $val = explode (';', $i);
    13.     $name = preg_replace('/[\s]{2,}/', ' ', trim($val[0]));////удаляет лишние пробелы снаружи и двойные пробелы внутри
    14.     $phone1 = $val[1];
    15.     $phone2 = $val[2];
    16.     $dep = preg_replace('/[\s]{2,}/', ' ', trim($val[3])); ////удаляет лишние пробелы снаружи и двойные пробелы внутри
    17.     $second = array(name=>$name,phone1=>$phone1, phone2=>$phone2, phone3=>"", default_photo=>"");
    18.    
    19. //$dep - название отдела
    20.  
    21.  
    22.  
    23.     if (!array_key_exists($dep, $first)){ //если такого отдела в массиве нет, он его добавляет
    24.         $first[$dep]=[$second];
    25.  
    26.     }
    27.         else{
    28.             array_push($first[$dep], //добавляет к текущему индексу доп массивы
    29.         }
    30. }
    31.  
    32.  
    33. echo "<pre>";
    34. var_dump($first);

    выдает вроде все правильно

    Код (Text):
    1.  
    2. array(3) {
    3.   ["Руководство"]=>
    4.   array(3) {
    5.     [0]=>
    6.     array(5) {
    7.       ["name"]=>
    8.       string(41) "Иванов Иван Иванович"
    9.       ["phone1"]=>
    10.       string(3) "100"
    11.       ["phone2"]=>
    12.       string(15) "8-xxx-xxx-xx-xx"
    13.       ["phone3"]=>
    14.       string(0) ""
    15.       ["default_photo"]=>
    16.       string(0) ""
    17.     }
    18.     [1]=>
    19.     array(5) {
    20.       ["name"]=>
    21.       string(42) "Петров Петр Алексеевич"
    22.       ["phone1"]=>
    23.       string(3) "101"
    24.       ["phone2"]=>
    25.       string(15) "8-xxx-xxx-xx-xx"
    26.       ["phone3"]=>
    27.       string(0) ""
    28.       ["default_photo"]=>
    29.       string(0) ""
    30.     }
    31.     [2]=>
    32.     array(5) {
    33.       ["name"]=>
    34.       string(40) "Михайлов Леонид Ильич"
    35.       ["phone1"]=>
    36.       string(3) "117"
    37.       ["phone2"]=>
    38.       string(15) "8-xxx-xxx-xx-xx"
    39.       ["phone3"]=>
    40.       string(0) ""
    41.       ["default_photo"]=>
    42.       string(0) ""
    43.     }
    44.   }
    45.   ["Сантехники"]=>
    46.   array(2) {
    47.     [0]=>
    48.     array(5) {
    49.       ["name"]=>
    50.       string(44) "Сидоров Петр Алексеевич"
    51.       ["phone1"]=>
    52.       string(3) "103"
    53.       ["phone2"]=>
    54.       string(15) "8-xxx-xxx-xx-xx"
    55.       ["phone3"]=>
    56.       string(0) ""
    57.       ["default_photo"]=>
    58.       string(0) ""
    59.     }
    60.     [1]=>
    61.     array(5) {
    62.       ["name"]=>
    63.       string(52) "Осокин Михаил Александрович"
    64.       ["phone1"]=>
    65.       string(3) "111"
    66.       ["phone2"]=>
    67.       string(15) "8-xxx-xxx-xx-xx"
    68.       ["phone3"]=>
    69.       string(0) ""
    70.       ["default_photo"]=>
    71.       string(0) ""
    72.     }
    73.   }
    74.   ["Грузчики"]=>
    75.   array(2) {
    76.     [0]=>
    77.     array(5) {
    78.       ["name"]=>
    79.       string(54) "Михайлов Станислав Сергеевич"
    80.       ["phone1"]=>
    81.       string(3) "122"
    82.       ["phone2"]=>
    83.       string(15) "8-xxx-xxx-xx-xx"
    84.       ["phone3"]=>
    85.       string(0) ""
    86.       ["default_photo"]=>
    87.       string(0) ""
    88.     }
    89.     [1]=>
    90.     array(5) {
    91.       ["name"]=>
    92.       string(48) "Леонидов Марк Арнольдович"
    93.       ["phone1"]=>
    94.       string(3) "124"
    95.       ["phone2"]=>
    96.       string(15) "8-xxx-xxx-xx-xx"
    97.       ["phone3"]=>
    98.       string(0) ""
    99.       ["default_photo"]=>
    100.       string(0) ""
    101.     }
    102.   }
    103. }
    при прогоне циклом по массиву
    Код (Text):
    1.  
    2. foreach ($first as $keyf ) {
    3.     echo $keyf;
    4. }
    выдает ключ = array

    не могу понять, как получить в цикле ключи "руководство, сантехники, грузчики"...
    Заранее спасибо
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
  3. inter1c

    inter1c Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    извиняюсь...не совсем понял...
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Что непонятно? Первая - форма одновременного перебора и ключей и значений, см. доки по foreach. Второе - функция, которая извлекает одни ключи из массива.
     
  5. inter1c

    inter1c Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    Все получилось, спасибо