|
|
|
| здравствуйте.
Дает ошибку
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($str, 0, $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);
}
?>
|
| |
|
|
|
|
|
|
|
для: liberty
(09.06.2013 в 00:26)
| | Прочитать ошибку не пробовали?
Warning: Missing argument 2 for truncate()
потерян аргумент 2 функции truncate
Смотрим
function truncate($str, $len)
|
функция принимает 2 аргумента, а вызывается так:
Что тут не так?
Стоит подучить английский, а не бежать на форум по поводу каждой такой ошибки. | |
|
|
|
|
|
|
|
для: DangerBay
(09.06.2013 в 00:46)
| | что означает "потерян"?
речь идет о $len? | |
|
|
|
|
|
|
|
для: liberty
(09.06.2013 в 01:04)
| | Речь идет об аргументах функции - объявлено две, а передаете ей один, к тому же в вашей функции он обязателен. | |
|
|
|
|
|
|
|
для: confirm
(09.06.2013 в 01:14)
| | ну тогда
$text = truncate($text, 30);
но почему идет обрезка после 30 символа?
смысл функции не обрезать слова. | |
|
|
|
|
|
|
|
для: liberty
(09.06.2013 в 01:27)
| | Остаётся вопрос: а в чём смысл функции?
С виду - образцовый говнокод. | |
|
|
|
|
|
|
|
|
для: liberty
(09.06.2013 в 02:58)
| | Эта функция у меня работает, только зачем так извращаться?
Задача очень простая
<?php
function truncate($str, $len) {
if (strlen($str) > $len) {
$cuted = substr($str, 0, $len);
$pos = strrpos($cuted, ' ');
if ($pos !== false)
return substr($cuted, 0, $pos) . '...';
else
return $cuted . '...';
}
return $str;
}
|
| |
|
|
|
|
|
|
|
для: 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 = ' …', $charset = 'UTF-8', $token = '~') {
$str = strip_tags($str);
if (mb_strlen($str, $charset) >= $lenght) {
$wrap = wordwrap($str, $lenght, $token);
$str_cut = mb_substr($wrap, 0, mb_strpos($wrap, $token, 0, $charset), $charset);
return $str_cut .= $end;
} else {
return $str;
}
}
?>
|
Из обязательных - первый аргумент. Вызывается как-то так:
<?php
$str = 'Ваша строка, которую нужно урезать';
echo cutStr($str);
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(09.06.2013 в 20:08)
| | Пробуем подставить одно длинное слово
$str = 'Вашастрока,которуюнужноурезать';
echo cutStr($str, 20);
|
и получаем...
ничего не получаем. | |
|
|
|
|
|
|
|
для: DangerBay
(09.06.2013 в 20:54)
| | Зачем? Задача усечь строку, не порезав слова посередине. Вы же предлагаете наоборот резать "длинные" слова | |
|
|
|
|
|
|
|
для: mihdan
(10.06.2013 в 14:40)
| | А есть точные данные что именно будет подставляться? Там может быть всё что угодно.
Выпадут, например, слова:
частнопредпринимательский
человеконенавистничество
высокопревосходительство
рентгеноэлектрокардиографический
А нам порезать нужно по 20 символов.
Функция вернет просто " …". Это корректно? Явно не то, что ожидается. | |
|
|
|
|
|
|
|
для: DangerBay
(10.06.2013 в 15:10)
| | Ну резать слова, согласитесь, тоже не верно. Приведенные вами слова встречаются редко - всего не учтешь сразу. | |
|
|
|