ФорумПрограммированиеPHP для идиотов → Найти максимальный элемент в массиве

Найти максимальный элемент в массиве

  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 8 апреля 2011 г. 6:29

    Дан массив array(1, 2, 3, array(4, 5, array(6, 7), 8), 9, 10) , найти максимальный элемент.
    просто фунцкия max() не справляется, т.к. возвращает вложенный массив.
    Спустя 24 сек.
    Подскажите как решить задачку.
  • Sinkler

    Сообщения: 7931 Репутация: N Группа: в ухо

    Spritz 8 апреля 2011 г. 6:34, спустя 5 минут 13 секунд

    распарсь массив рекурсивной функцией и max
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 8 апреля 2011 г. 6:53, спустя 18 минут 58 секунд

    Sinkler, спасибо, кому интересно, вот:
    $array = array(1, 27, array(25, 362, array(13, 25)), 60);

    function findMax($array)
    {
    foreach ($array as $value) {
    if(is_array($value)) {
    foreach ($value as $a) {
    if(is_array($a)) {
    foreach ($a as $b) {
    $new_array[] = $b;
    }

    } else {
    $new_array[] = $a;
    }
    }
    }
    else {
    $new_array[] = $value;
    }
    }
    return max($new_array);
    }

    echo findMax($array);

  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 8 апреля 2011 г. 7:04, спустя 10 минут 33 секунды

    ебаный стыд
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 8 апреля 2011 г. 7:10, спустя 6 минут 26 секунд

    Абырвалг, а как?
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 8 апреля 2011 г. 7:16, спустя 5 минут 53 секунды

    рекурсивной функцией

  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 8 апреля 2011 г. 7:21, спустя 4 минуты 38 секунд

    Kikky, рекурсия - это должно у тебя быть. Тогда:
    1. код будет значительно меньше и красивее
    2. можно туда будет кидать хоть 23432948587-мерные массивы =)
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 8 апреля 2011 г. 7:24, спустя 3 минуты 19 секунд


    Kikky, рекурсия - это должно у тебя быть. Тогда:
    1. код будет значительно меньше и красивее
    2. можно туда будет кидать хоть 23432948587-мерные массивы =)

    Ну, ну для рекурсии? =))) Будет stack overflow

  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 8 апреля 2011 г. 7:48, спустя 24 минуты 6 секунд

    срамота

    $arr = array(5, 1, array(3, 6), 2, 4);
    array_walk_recursive($arr, create_function('$item', '{ global $max; $max = max($item, $max); }'));
    echo $max;
    Спустя 250 сек.
    в принципе рекурсия раскладывается в итератор, просто здесь нах не надо.
    вот любопытный пример: обход дерева папок без рекурсии
    http://aidanlister.com/2009/06/executing-a-callback-for-all-files-in-a-directory/
    ιιlllιlllι унц-унц
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 8 апреля 2011 г. 8:08, спустя 19 минут 44 секунды

    artoodetoo, так просто оказывается :) ..спасибо всем.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 8 апреля 2011 г. 8:09, спустя 1 минуту 29 секунд

    artoodetoo, в данной ситуации этот костыль конечно сканает, но я бы разбил задачу на 2 задачи.

    1. array_flatten - написать .. которая multidimensial array => flat array
    2. max …

    ну и было бы

    $max = max(Array::flatten($array));

    так сказать, заказал бы себе code reuse
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 8 апреля 2011 г. 15:46, спустя 7 часов 36 минут 48 секунд

    phpdude, полностью согласен
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 8 апреля 2011 г. 23:25, спустя 7 часов 39 минут 8 секунд

    array_flatten - написать

    ну почему вот в рубях оно уже есть, а в пыхе писать надо
    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 8 апреля 2011 г. 23:55, спустя 29 минут 26 секунд


    array_flatten - написать

    ну почему вот в рубях оно уже есть, а в пыхе писать надо
    просто "слизать" проще, чем придумать))

    да, тоже удивился, всю доку перерыл, нет такой функции … кто нить знает куда писать насчет добавления новых функций?
    Сапожник без сапог
  • Flare

    Сообщения: 284 Репутация: N Группа: Кто попало

    Spritz 8 апреля 2011 г. 23:57, спустя 2 минуты 45 секунд

    function array_values_recursive($arr){
    $arr = array_values($arr);
    foreach($arr as $key => $val)
    if(array_values($val) === $val)
    $arr[$key] = array_values_recursive($val);

    return $arr;
    }

    и потом уже с полученного массива максимальный считываешь

Пожалуйста, авторизуйтесь, чтобы написать комментарий!