Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор наименьшего количества символов у елемента, в массиве. Ф-ция min(). 
V
    Опции темы
zluka
Дата 25.3.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Есть вот такой массив:
Код

  $massiv = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx');   

Пишу ф-ю min() для вывода минимального количества символов у елемента:
Код

 echo min($massiv);

Выводит:
Код

Boss

Почему? Это же не минимальное? 'NAV' - должно было вывести..


--------------------
user posted image
PM MAIL   Вверх
SelenIT
Дата 25.3.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



zluka, с чего Вы взяли, что 
Цитата(zluka @  25.3.2007,  13:33 Найти цитируемый пост)
min() для вывода минимального количества символов у елемента?

min выводит просто наименьший элемент - т.е. тот, который будет первым при соотв. сортировке. Для текстовых строк, очевидно, сортировка идет по алфавиту и первым будет слово на букву B, которое и выводится.

Имхо, проще всего найти самое короткое слово циклом, не заморачиваясь со всякими array_map и иже с ними...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
zluka
Дата 25.3.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Цитата(SelenIT @  25.3.2007,  14:00 Найти цитируемый пост)
min выводит просто наименьший элемент

Спасибо, не знал.

Цитата(SelenIT @  25.3.2007,  14:00 Найти цитируемый пост)
Имхо, проще всего найти самое короткое слово циклом

Я вроде б то написал, но один вопрос - как теперь получить ключ елемента?
Код

 $massiv = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx');
 $new_arr = array();

 for($i=0; $i<count($massiv); $i++)  
 {
    $new_arr[] = strlen($massiv[$i]);      //заносим в новый массив уже подсчитаные елементы $massiv
    $min = min($new_arr);                      //определяем наименьший елемент 

    if($min)
    {
        $rez = $massiv[$min];
    }
 }    
    
  echo $rez;

Help plz.


--------------------
user posted image
PM MAIL   Вверх
mishaSL
Дата 25.3.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



zluka, думаю так будет лучше:
Код

<?php

$massiv = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx');

function minStringInArray(& $arr)
{
    if (!is_array($arr)) {
        return false;
    }
    $minKey        = 0;
    $minCount    = 0;
    $buffer        = 0;
    $f            = true;    
    foreach ($arr as $key=>$value) {
        $value    = strval($value);
        $buffer = strlen($value);
        if ($f) {
            $f            = false;
            $minKey        = $key;
            $minCount    = $buffer;
        }
        if ($buffer<$minCount) {
            $minKey        = $key;            
        }
    }
    
    return $minKey;
}

$k = minStringInArray($massiv);
print 'Наименьшая строка в массиве: '.$massiv[$k];

?>



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SelenIT
Дата 25.3.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Хм...
Код

$massiv = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx');

function shortestElement($m) {
     if (!is_array($m) || !count($m)) return false;
     $minlen = 2147483647; // заведомо больше длины любого элемента 
     foreach ($m as $k => $v) {
         $curlen = strlen($v);
         if ($curlen < $minlen) {
             $minlen = $curlen;
             $minkey = $k;
         }
     }
     return array($minkey => $m[$minkey]);
}

var_dump(shortestElement($massiv));

не проще ли немного?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
zluka
Дата 25.3.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Хмм.. интересно ты сделал mishaSL . Спасибо.
Только вот одного не пойму - что делает ф-я strval($value); ?


--------------------
user posted image
PM MAIL   Вверх
SelenIT
Дата 25.3.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(zluka @  25.3.2007,  18:06 Найти цитируемый пост)
что делает ф-я strval($value);

Насильно приводит значение элемента массива к строке (если там были, к примеру, число или массив). В принципе, strlen сама неявно это делает, но в случае массива, например, генерирует Notice...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
mishaSL
Дата 25.3.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(zluka @  25.3.2007,  18:06 Найти цитируемый пост)
Только вот одного не пойму - что делает ф-я strval($value); ? 


http://ru2.php.net/strval - приведение переменной к типу string



Цитата(SelenIT @  25.3.2007,  17:17 Найти цитируемый пост)
не проще ли немного? 


А чем проще?
Если этим:

Цитата(SelenIT @  25.3.2007,  17:17 Найти цитируемый пост)
$minlen = 2147483647; // заведомо больше длины любого элемента 


то это уже кому как нравится smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SelenIT
Дата 25.3.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



mishaSL, мне кажется, понятнее... Меньше переменных неочевидного назначения... лично у меня ушло минуты три, пока я врубился в смысл флага f и однократного определения $minCount smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
mishaSL
Дата 25.3.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(SelenIT @  25.3.2007,  19:05 Найти цитируемый пост)
лично у меня ушло минуты три, пока я врубился в смысл флага f и однократного определения $minCount


Сори, коменты забыл написать smile 

Считаем вопрос решенным smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1761 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.