отображается только 60 слов и база данных, содержащая 100 слов

#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 слов, а не символов