Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ошибка с функцией
 
 автор: liberty   (09.06.2013 в 00:26)   письмо автору
 
 

здравствуйте.
Дает ошибку
Warning: Missing argument 2 for truncate(), called in ... on line 34 and defined ...
на эту строку function truncate($str, $len) {
<?php
$result 
mysql_query("SELECT * FROM comment WHERE date < NOW() - INTERVAL 1 DAY ORDER BY date DESC LIMIT 10"$db);

function 
truncate($str$len) {
  
$tail max(0$len-10);
  
$trunk substr($str0$tail);
  
$trunk .= strrev(preg_replace('~^..+?[\s,:]\b|^...~''...'strrev(substr($str$tail$len-$tail))));
  return 
$trunk;
}

while (
$comment mysql_fetch_array($result))
{
$author $comment["author"];
$post $comment["post"];
$text $comment["text"];

$text truncate($text);

printf("<a href='post.php?id=%s'>
        <p>%s: %s</p></a>
        "
,$post,$author,$text);
}
?>

  Ответить  
 
 автор: DangerBay   (09.06.2013 в 00:46)   письмо автору
 
   для: liberty   (09.06.2013 в 00:26)
 

Прочитать ошибку не пробовали?
Warning: Missing argument 2 for truncate()
потерян аргумент 2 функции truncate
Смотрим
function truncate($str, $len) 

функция принимает 2 аргумента, а вызывается так:
$text = truncate($text); 

Что тут не так?
Стоит подучить английский, а не бежать на форум по поводу каждой такой ошибки.

  Ответить  
 
 автор: liberty   (09.06.2013 в 01:04)   письмо автору
 
   для: DangerBay   (09.06.2013 в 00:46)
 

что означает "потерян"?
речь идет о $len?

  Ответить  
 
 автор: confirm   (09.06.2013 в 01:14)   письмо автору
 
   для: liberty   (09.06.2013 в 01:04)
 

Речь идет об аргументах функции - объявлено две, а передаете ей один, к тому же в вашей функции он обязателен.

  Ответить  
 
 автор: liberty   (09.06.2013 в 01:27)   письмо автору
 
   для: confirm   (09.06.2013 в 01:14)
 

ну тогда
$text = truncate($text, 30);

но почему идет обрезка после 30 символа?
смысл функции не обрезать слова.

  Ответить  
 
 автор: DangerBay   (09.06.2013 в 02:33)   письмо автору
 
   для: liberty   (09.06.2013 в 01:27)
 

Остаётся вопрос: а в чём смысл функции?
С виду - образцовый говнокод.

  Ответить  
 
 автор: liberty   (09.06.2013 в 02:58)   письмо автору
 
   для: DangerBay   (09.06.2013 в 02:33)
 

здесь взял http://stackoverflow.com/questions/972010/shorten-string-in-php-full-words-only
второй вариант.

  Ответить  
 
 автор: DangerBay   (09.06.2013 в 13:37)   письмо автору
 
   для: liberty   (09.06.2013 в 02:58)
 

Эта функция у меня работает, только зачем так извращаться?
Задача очень простая
<?php
function truncate($str$len) {
    if (
strlen($str) > $len) {
        
$cuted substr($str0$len);
        
$pos strrpos($cuted' ');

        if (
$pos !== false)
            return 
substr($cuted0$pos) . '...';
        else
            return 
$cuted '...';
    }
    return 
$str;
}

  Ответить  
 
 автор: mihdan   (09.06.2013 в 20:08)   письмо автору
 
   для: liberty   (09.06.2013 в 00:26)
 

Я бы реализовал так, чтобы не резать слова посередине:


<?php
/**
 * Умная обрезка строки
 * @param string $str - исходная строка
 * @param int $lenght - желаемая длина результирующей строки
 * @param string $end - завершение длинной строки
 * @param string $charset - кодировка
 * @param string $token - символ усечения
 * @return string - обрезанная строка
 */
function cutStr($str$lenght 100$end '&nbsp;&hellip;'$charset 'UTF-8'$token '~') {
    
$str strip_tags($str);
    if (
mb_strlen($str$charset) >= $lenght) {
        
$wrap wordwrap($str$lenght$token);
        
$str_cut mb_substr($wrap0mb_strpos($wrap$token0$charset), $charset);   
        return 
$str_cut .= $end;
    } else {
        return 
$str;
    }
}
?>


Из обязательных - первый аргумент. Вызывается как-то так:


<?php
$str 
'Ваша строка, которую нужно урезать';
echo 
cutStr($str);
?>

  Ответить  
 
 автор: DangerBay   (09.06.2013 в 20:54)   письмо автору
 
   для: mihdan   (09.06.2013 в 20:08)
 

Пробуем подставить одно длинное слово
$str = 'Вашастрока,которуюнужноурезать';
echo cutStr($str, 20); 

и получаем...
ничего не получаем.

  Ответить  
 
 автор: mihdan   (10.06.2013 в 14:40)   письмо автору
 
   для: DangerBay   (09.06.2013 в 20:54)
 

Зачем? Задача усечь строку, не порезав слова посередине. Вы же предлагаете наоборот резать "длинные" слова

  Ответить  
 
 автор: DangerBay   (10.06.2013 в 15:10)   письмо автору
 
   для: mihdan   (10.06.2013 в 14:40)
 

А есть точные данные что именно будет подставляться? Там может быть всё что угодно.
Выпадут, например, слова:
частнопредпринимательский
человеконенавистничество
высокопревосходительство
рентгеноэлектрокардиографический
А нам порезать нужно по 20 символов.
Функция вернет просто "&nbsp;&hellip;". Это корректно? Явно не то, что ожидается.

  Ответить  
 
 автор: mihdan   (13.06.2013 в 13:52)   письмо автору
 
   для: DangerBay   (10.06.2013 в 15:10)
 

Ну резать слова, согласитесь, тоже не верно. Приведенные вами слова встречаются редко - всего не учтешь сразу.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования