我在$ content var中有一些文字,如下所示:
$content = $page_data->post_content;
我需要以某种方式切片内容并提取句子,将每个句子插入其自己的var中。 像这样:
$sentence1 = 'first sentence of the text';
$sentence2 = 'second sentence of the text';
依旧......
我该怎么做?
PS 我在考虑这样的事情,但我需要为每个句子提供一些循环:
$match = null;
preg_match('/(.*?[?\.!]{1,3})/', $content, $match);
$sentence1 = $match[1];
$sentence2 = $match[2];
泰:)
答案 0 :(得分:2)
你在变量中需要它们吗?你不能使用数组吗?
$sentence = explode(". ", $page_data->post_content);
编辑:
如果您需要变量:
$allSentence = explode(". ", $page_data->post_content);
foreach($allSentence as $key => $val)
{
${"sentence". $key} = $val;
}
答案 1 :(得分:1)
假设每个句子以句号结束,您可以使用explode
:
$content = $page_data->post_content;
$sentences = explode('.', $content);
现在您的句子可以像:
echo $sentences[0]; // 1st sentence
echo $sentences[1]; // 2nd sentence
echo $sentences[2]; // 3rd sentence
// and so on
请注意,您可以使用count
或sizeof
来计算总句子数:
echo count($sentences);
为每个句子创建一个新变量并不是一个好主意,想象一下你可能需要通过增加内存使用量来创建那么多数量的变量。您只需使用数组索引$sentences[0]
,$sentences[1]
等等。
答案 2 :(得分:0)
请勿使用单独命名的变量,例如$sentence1
,$sentence2
等。使用数组。
$sentences = explode('.', $page_data->post_content);
这为变量$page_data->post_content
提供了一系列“句子”,其中“句子”实际上意味着句号之间的字符序列。只要句号完全用于表示句子结尾之外的其他内容(例如“沃森先生”),这个逻辑就会被绊倒。
编辑:当然,您可以使用更复杂的逻辑来检测句子边界,如您所建议的那样。您仍应 使用数组 ,而不是在名称末尾创建包含数字的未知数量的变量。
答案 3 :(得分:0)
假设通过终止标点符号来界定句子,可选地后跟空格,您可以执行以下操作来获取数组中的句子。
$sentences = preg_split('/[!?\.]\s?/', $content);
您可能希望使用
修剪任何其他空格$sentences = array_map('trim', $sentences);
这样,$sentences[0]
是第一个,$sentences[1]
是第二个,依此类推。如果您需要循环浏览它们,可以使用foreach
:
foreach($sentences as $sentence) {
// Do something with $sentence...
}