Здравствуйте,скажите пожалуйста,как программно определить самого старшего работника предприятия,если есть его имя и возраст?
а если без шуток,допустим у меня есть массив в каком перечисляется несколько сотрудников и к их именам сразу прикреплен возраст,как мне сделать так,чтобы echo выводило именно самого старшего сотрудника
а если без шуток, ты мог сразу сказать про массив. перебрать массив и запомнить того, кто старше, каждый раз сверяя, и внося в переменную имя того, кто в этот раз оказался страше. Пройдёшь весь массив и получишь искомое в этой переменной.
PHP: <?php header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <title></title> </head> <body> <pre> <?php $workers = [ ['16', 'One'], ['80', 'Two'], ['50', 'Three'], ]; $old_worker = ['0']; foreach ($workers as $worker) { if ($worker[0]>$old_worker[0]) { $old_worker = $worker; } } var_export($old_worker); ?> </pre> </body> </html>
Или с помощью сортирующих функций. Например, usort. PHP: <?php $workers = [ ['16', 'One'], ['80', 'Two'], ['50', 'Three'], ]; usort($workers, function($a, $b){ return $a[0] < $b[0]; }); var_dump($workers[0]);
Не самый простой, но может быть самый элегантный способ: array_redurce - функция "сворачивания" массива в единственное значение. в нашем случае это запись с максимальным 'age', $initial это начальное значение. здесь в качестве начального берется просто первая строка массива. сам массив при этом уменьшается. ))) PHP: <?php $array = [ ['name' => 'John', 'age' => 20], ['name' => 'Mary', 'age' => 25], ['name' => 'Jack', 'age' => 18], ['name' => 'Simon', 'age' => 25], ['name' => 'Steve', 'age' => 28], ['name' => 'Larry', 'age' => 19], ['name' => 'Yon', 'age' => 28], ['name' => 'Barb', 'age' => 31], ['name' => 'Lee', 'age' => 15], ['name' => 'Suzy', 'age' => 32], ['name' => 'Zak', 'age' => 28], ]; $initial = array_shift($array); $result = array_reduce( $array, function ($result, $item) { if ($item['age'] > $result['age']) { $result = $item; } return $result; }, $initial ); var_export($result); --- Добавлено --- P.S. Тот кто решает подобные задачи, закидывая вопрос на форумы, точно не сумеет оценить красоту
а допустим как в таком коде вывести информацию типа (echo самый старший Никанур,ему 99)? PHP: <?php $names = array( '0' => array( 'name' => 'Rudik', 'age' => '112' ), '1' => array( 'name' => 'Alfonsa', 'age' => '81' ), '2' => array( 'name' => 'Enigma', 'age' => '777' ) ); var_dump($names); ?>
@ResparenUA PHP: $names = array( '0' => array( 'name' => 'Rudik', 'age' => '112' ), '1' => array( 'name' => 'Alfonsa', 'age' => '81' ), '2' => array( 'name' => 'Enigma', 'age' => '777' ) ); $initial = array_shift($names); $result = array_reduce( $names, function ($result, $item) { if ($item['age'] > $result['age']) { $result = $item; } return $result; }, $initial ); echo $result['name']; --- Добавлено --- @ResparenUA Можно еще сортировку сделать и взять первый элемент, как предложил @Deonis - это самое короткое решение PHP: $names = array( '0' => array( 'name' => 'Rudik', 'age' => '112' ), '1' => array( 'name' => 'Alfonsa', 'age' => '81' ), '2' => array( 'name' => 'Enigma', 'age' => '777' ) ); usort($names, function ($a, $b) { return $a['age'] < $b['age']; }); echo $names[0]['name'];
Решение @denis01 самое что ни на есть "в лоб" PHP: $names = array( '0' => array( 'name' => 'Rudik', 'age' => '112' ), '1' => array( 'name' => 'Alfonsa', 'age' => '81' ), '2' => array( 'name' => 'Enigma', 'age' => '777' ) ); $old_worker = array('age' => '0'); foreach ($names as $worker) { if ($worker['age']> $old_worker['age']) { $old_worker = $worker; } } echo $old_worker['name'];
в моём коде, меняем это PHP: var_export($old_worker); на PHP: echo 'самый старший '.$old_worker[1].',ему '.$old_worker[0];
Имеешь ввиду через запятую? Надо замерить скорость производительности Понятно что конкатенация проиграет, но так привычнее и понятнее, будем менять это положение? @ResparenUA если будет медленно работать: PHP: echo 'самый старший ',$old_worker[1],',ему ',$old_worker[0];