#php #mysql
#php #mysql
Вопрос:
Я хочу, чтобы на моей странице отображались только первые 60 слов из ‘$ output’, которые были загружены в базу данных из 100 слов, какой для меня самый простой способ сделать это?
Я хочу, чтобы $ output []=»description извлекал только первые 60 слов из базы данных. ** Я перепробовал много методов, но у меня не работает**
$output[]="<td>";
$output[]="<img src='images/".$row_2[3]."' width=50 />";
$output[]='</td>';
$output[]='<td>';
$output[]="Name:$row_2[1]<br>";
$output[]="Price:$row_2[2]<br>";
$output[]="Description:$row_2[5]<br>";
$output[]="<a href=user.php?prdcod=$row_2[0]amp;usrcod=$usrcod>Add To Wishlist</a><br>";
$output[]="<a href=purchase.php?prdcod=$row_2[0]amp;usercod=$usrcodamp;action=Add>Purchase</a>";
$output[]='</td>';
Комментарии:
1. Как вы запрашиваете базу данных?
2. выберите * из tbprd, где prdcatcod=$catcod, а prdavl имеет вид’%Y%’
3. есть ли какой-либо другой способ использовать только первые 60 слов, например, используя substr
4. Каково имя столбца, из которого вы извлекаете 60 символов?
5. @Learner Вы делаете это для
read more..
чего-то такого, где вы собираетесь использовать многоточие (.
), чтобы пользователи нажимали наread more..
, чтобы увидеть полный текст?
Ответ №1:
Если ваше определение слова состоит из букв и / или цифр и других символов, объединенных и разделенных пробелом, то вы можете использовать explode для их разделения, затем вырезать первые 60 и преобразовать их обратно в строку.
echo implode(" ", array_slice(explode(" ", $stringOf100Words), 0, 60));
Смотрите пример здесь: https://3v4l.org/D4nqJ
Если строка содержит двойные пробелы, то вам нужно использовать preg_split и разбить на любое количество пробелов с помощью "/s /"
.
implode(" ", array_slice(preg_split("/s /", $str), 0, 60));
Комментарии:
1. Спасибо за помощь, но когда я набираю 60, получается 62 слова, но когда я набираю на 2 меньше 60, у меня это работает.
2. Это странно. Вы используете версию explode или preg_split? Я думаю, что preg_split должно быть более точным, чем explode, поскольку двойной пробел может стать словом с explode
3. как насчет word. Извлекается 60 предложений
Ответ №2:
Другие ответы не учитывают взаиморасположение или они считают буквы. Вот небольшая функция:
function get60Words(string $str) {
$words = str_word_count($str, 2);
$cnt = 0;
foreach($words as $strPos => $v) {
if($cnt === 60) {
return substr($str, 0, $strPos-1);
}
}
return $str;
}
Он получает слова строки, получает позицию 60-го слова и возвращает подстроку.
Вот рабочий пример из 5 слов:https://3v4l.org/N6J2R
Комментарии:
1. Почему важно подсчитывать буквы ? Ваш вывод не содержит точек и запятых или любых других символов, отличных от az. Редактировать: извините, что это включает точки, моя ошибка.
2. @Andreas Извините, я неправильно выразился. Я имел в виду, что в одном из других ответов учитываются не слова, а буквы.
Ответ №3:
Вы можете использовать MYSQL SUBSTRING()
для извлечения 60 символов из вашей строки. Учитывая ваш запрос, он должен выглядеть примерно так
SELECT *, SUBSTRING(<COLUMN NAME>, 1, 60) AS ExractedString FROM tbprd WHERE prdcatcod='$catcod' AND prdavlsts LIKE '%Y%'
Замените <COLUMN NAME>
именем столбца, из которого вы хотите извлечь 60 символов
Комментарии:
1. 60 слов, а не символов