За последние 24 часа нас посетили 20119 программистов и 1657 роботов. Сейчас ищет 1381 программист ...

Самый старый работник?

Тема в разделе "Сделайте за меня", создана пользователем ResparenUA, 17 сен 2016.

  1. ResparenUA

    ResparenUA Новичок

    С нами с:
    15 сен 2016
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте,скажите пожалуйста,как программно определить самого старшего работника предприятия,если есть его имя и возраст?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    есть где?
     
  3. ResparenUA

    ResparenUA Новичок

    С нами с:
    15 сен 2016
    Сообщения:
    8
    Симпатии:
    0
    на кухне
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тогда просто спросить
     
  5. ResparenUA

    ResparenUA Новичок

    С нами с:
    15 сен 2016
    Сообщения:
    8
    Симпатии:
    0
    а если без шуток,допустим у меня есть массив в каком перечисляется несколько сотрудников и к их именам сразу прикреплен возраст,как мне сделать так,чтобы echo выводило именно самого старшего сотрудника
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а если без шуток, ты мог сразу сказать про массив.
    перебрать массив и запомнить того, кто старше, каждый раз сверяя, и внося в переменную имя того, кто в этот раз оказался страше. Пройдёшь весь массив и получишь искомое в этой переменной.
     
  7. ResparenUA

    ResparenUA Новичок

    С нами с:
    15 сен 2016
    Сообщения:
    8
    Симпатии:
    0
    а можно кодом?
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. <?php
    2. header('Content-Type: text/html; charset=utf-8');
    3. ?>
    4. <!DOCTYPE html>
    5. <html>
    6. <head>
    7.     <title></title>
    8. </head>
    9. <body>
    10. <pre>
    11. <?php
    12. $workers = [
    13.     ['16', 'One'],
    14.     ['80', 'Two'],
    15.     ['50', 'Three'],
    16. ];
    17.  
    18. $old_worker = ['0'];
    19.  
    20. foreach ($workers as $worker) {
    21.     if ($worker[0]>$old_worker[0]) {
    22.         $old_worker = $worker;
    23.     }
    24. }
    25. var_export($old_worker);
    26. ?>
    27. </pre>
    28. </body>
    29. </html>
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    один из вариантов, в будущем.
    не работает, у меня ругается на 12 строку!
     
  10. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Халява же
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    можно без цикла
    max ( array_keys ( $arr ) );
    и еще одна функция o_O
     
  12. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Или с помощью сортирующих функций. Например, usort.
    PHP:
    1. <?php
    2. $workers = [
    3.     ['16', 'One'],
    4.     ['80', 'Two'],
    5.     ['50', 'Three'],
    6. ];
    7. usort($workers, function($a, $b){
    8.     return $a[0] < $b[0];
    9. });
    10. var_dump($workers[0]);
     
    [vs] и Fell-x27 нравится это.
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    ты забыл про
     
  14. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.119
    Симпатии:
    1.245
    Адрес:
    там-сям
    Не самый простой, но может быть самый элегантный способ:
    array_redurce - функция "сворачивания" массива в единственное значение. в нашем случае это запись с максимальным 'age',
    $initial это начальное значение. здесь в качестве начального берется просто первая строка массива. сам массив при этом уменьшается. )))
    PHP:
    1. <?php
    2.  
    3. $array = [
    4. ['name' => 'John',  'age' => 20],
    5. ['name' => 'Mary',  'age' => 25],
    6. ['name' => 'Jack',  'age' => 18],
    7. ['name' => 'Simon', 'age' => 25],
    8. ['name' => 'Steve', 'age' => 28],
    9. ['name' => 'Larry', 'age' => 19],
    10. ['name' => 'Yon',   'age' => 28],
    11. ['name' => 'Barb',  'age' => 31],
    12. ['name' => 'Lee',   'age' => 15],
    13. ['name' => 'Suzy',  'age' => 32],
    14. ['name' => 'Zak',   'age' => 28],
    15. ];
    16.  
    17. $initial = array_shift($array);
    18.  
    19. $result = array_reduce(
    20.     $array,
    21.     function ($result, $item) {
    22.         if ($item['age'] > $result['age']) {
    23.             $result = $item;
    24.         }
    25.         return $result;
    26.     },
    27.     $initial
    28. );
    29.  
    30. var_export($result);
    --- Добавлено ---
    P.S. Тот кто решает подобные задачи, закидывая вопрос на форумы, точно не сумеет оценить красоту :)
     
    denis01 нравится это.
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Чтобы оценить красоту редьюса нужно знать про него, и что его можно выполнять параллельно.
     
  16. ResparenUA

    ResparenUA Новичок

    С нами с:
    15 сен 2016
    Сообщения:
    8
    Симпатии:
    0
    а допустим как в таком коде вывести информацию типа (echo самый старший Никанур,ему 99)?

    PHP:
    1. <?php
    2. $names = array(
    3.     '0' => array(
    4.         'name' => 'Rudik',
    5.         'age' => '112'
    6.     ),
    7.     '1' => array(
    8.         'name' => 'Alfonsa',
    9.         'age' => '81'
    10.     ),
    11.     '2' => array(
    12.         'name' => 'Enigma',
    13.         'age' => '777'
    14.     )
    15. );
    16. var_dump($names);
    17. ?>
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  18. ResparenUA

    ResparenUA Новичок

    С нами с:
    15 сен 2016
    Сообщения:
    8
    Симпатии:
    0
    Это и дураку понятно,нужна упрощенная вариация данного кода.
    Скажем так,на уровне школьника новичка
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @ResparenUA
    PHP:
    1. $names = array(
    2.     '0' => array(
    3.         'name' => 'Rudik',
    4.         'age' => '112'
    5.     ),
    6.     '1' => array(
    7.         'name' => 'Alfonsa',
    8.         'age' => '81'
    9.     ),
    10.     '2' => array(
    11.         'name' => 'Enigma',
    12.         'age' => '777'
    13.     )
    14. );
    15.  
    16. $initial = array_shift($names);
    17. $result = array_reduce(
    18.     $names,
    19.     function ($result, $item) {
    20.         if ($item['age'] > $result['age']) {
    21.             $result = $item;
    22.         }
    23.         return $result;
    24.     },
    25.     $initial
    26. );
    27.  
    28. echo $result['name'];
    --- Добавлено ---
    @ResparenUA
    Можно еще сортировку сделать и взять первый элемент, как предложил @Deonis - это самое короткое решение
    PHP:
    1. $names = array(
    2.     '0' => array(
    3.         'name' => 'Rudik',
    4.         'age' => '112'
    5.     ),
    6.     '1' => array(
    7.         'name' => 'Alfonsa',
    8.         'age' => '81'
    9.     ),
    10.     '2' => array(
    11.         'name' => 'Enigma',
    12.         'age' => '777'
    13.     )
    14. );
    15.  
    16. usort($names, function ($a, $b) {
    17.   return $a['age'] < $b['age'];
    18. });
    19.  
    20. echo $names[0]['name'];
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет нельзя. мап можно. вот меня сглючило.
     
  21. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Решение @denis01 самое что ни на есть "в лоб"
    PHP:
    1. $names = array(
    2.     '0' => array(
    3.         'name' => 'Rudik',
    4.         'age' => '112'
    5.     ),
    6.     '1' => array(
    7.         'name' => 'Alfonsa',
    8.         'age' => '81'
    9.     ),
    10.     '2' => array(
    11.         'name' => 'Enigma',
    12.         'age' => '777'
    13.     )
    14. );
    15.  
    16. $old_worker = array('age' => '0');
    17. foreach ($names as $worker) {
    18.     if ($worker['age']> $old_worker['age']) {
    19.         $old_worker = $worker;
    20.     }
    21. }
    22.  
    23. echo $old_worker['name'];
     
  22. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    в моём коде, меняем это
    PHP:
    1. var_export($old_worker);
    на
    PHP:
    1. echo 'самый старший '.$old_worker[1].',ему '.$old_worker[0];
     
  23. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @denis01 зачем конкатенация? это ж эхо
     
  24. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Имеешь ввиду через запятую? Надо замерить скорость производительности :)

    Понятно что конкатенация проиграет, но так привычнее и понятнее, будем менять это положение?

    @ResparenUA если будет медленно работать:
    PHP:
    1. echo 'самый старший ',$old_worker[1],',ему ',$old_worker[0];
    :D
     
    ResparenUA, artoodetoo и Ganzal нравится это.
  25. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    и расход памяти :D
     
    denis01 нравится это.