[Закрыть]
 
popoff.donetsk.ua
Жадность определяется не соотношением того, сколько человек берёт и отдаёт, а тем, как сильно человек на этом соотношении концентрируется.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Статьи - Программирование - Технологии программирования - Флаги и оператор GOTO - Выбрать часть массива
Я это делаю
Персональное меню
Голосование
Деньги, либо любимое занятие? Постоянный адрес этого вопроса
Ваш возраст (не обязательно):

Введите целое число от 3 до 99.
Почему? (не обязательно):
Другие вопросы
Поиск по сайту
Реклама
Программное обеспечение любой сложности
koins.com.ua
Статистика

Выбрать часть массива

Постоянный адрес статьи

Условие: есть массив строк. Нужно выбрать часть массива, которая находится между первым элементом, содержащим в себе одну подстроку и следующим элементом, длина которого меньше 10.

Вот вариант решения с флагами (немного изменен мной - удалено все, что не касается сути):

<?php function array_part($a,$s_from)
{
  for(
$i=0$i<sizeof($a); $i++ )
  {
    if( 
strpos $a[$i], $s_from ) )
      
$StartPathSection 1;
    if( 
strlen $a[$i] ) < 10 and $StartPathSection == )
      
$StopPathSection 1;
    if( 
$StartPathSection == and $StopPathSection != )
    {
      if( 
$SavePart == )
        
$a_result[] = $a[$i];
      
$SavePart 1;
    }
  }
  return 
$a_result;
}
?>

Кроме флагов по этому коду можно было бы сделать еще вот такие замечания:

  • Некорректное использование функции strpos. В нашем случае функция не будет работать правильно, если искомая подстрока $s_from находится в самом начале строки - позиция у этой подстроки в таком случае будет 0, при использовании такого условия, как в приведенном выше примере, это означает «нет, не найдено». О такой особенности, кстати, прямо говорится в документации.
  • Использование неинициализированных переменных. Хотя PHP и допускает это, в целом это является дурным тоном и при злоупотреблении легко может привести к появлению ошибок и значительно снижает безопасность интернет-приложения. Особенно в комбинации с нестандартными настройками (например, при включенном register_globals).
  • Нетипичное использование оператора and. От оператора && этот оператор отличается тем, что у него выше приоритет. В целом, это не является ошибкой, просто странно его здесь видеть, когда для него нет особой необходимости.
  • Результат, который вернет эта функция в случае исходного массива нулевой длины, вообще говоря, является неопределенным.

Вот вариант решения «от меня»:

<?php function array_part($a,$s_from)
{
  
$k=false;
  for(
$i=0;$i<count($a)&&$k===false$i++ )
  {
    if(
strpos($a[$i], $s_from)!==false)
      
$k=$i;
  }
  if(
$k===false) return array();
  
$a_result=array();
  for(
$i=$k;$i<count($a)&&strlen($a[$i])>=10;$i++)
    
$a_result[]=$a[$i];
  return 
$a_result;
}
?>

Смотрите также

Прототип для этого примера:
http://phpclub.ru/talk/showthread.php?postid=542488#post542488

Последняя модификация: 13.11.05 23:56

Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>