一、前言
- 比如有一段话:你好,我好,大家好
- 关键字是:
我
,好
- 然后结果数据就是:(high 是否高亮:1-是;0-否)
array (
0 =>
array (
'content' => '你',
'high' => 0,
),
1 =>
array (
'content' => '好',
'high' => 1,
),
2 =>
array (
'content' => ',',
'high' => 0,
),
3 =>
array (
'content' => '我',
'high' => 1,
),
4 =>
array (
'content' => '好',
'high' => 1,
),
5 =>
array (
'content' => ',大家',
'high' => 0,
),
6 =>
array (
'content' => '好',
'high' => 1,
),
),
二、代码
public function start()
{
$keywords = ["你好", "啊", "亮晶晶", "梳妆匣", "说道", "一层楼", "之"];
$list = [
['name' => "内容第一行", 'content' => "你好艾希你你好啊,你好好啊,你真的明明好啊,眼睛亮晶晶的,nihao"],
['name' => "内容第二行", 'content' => "Hello,请别走走停停,休息一下说道说道,漂亮的梳妆匣梳妆匣梳妆匣送给你,如沐春风如沐春风"],
['name' => "内容第三行", 'content' => "欲穷千里目,更上一层楼"],
['name' => "内容第四行", 'content' => "合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下"],
['name' => "内容第四行", 'content' => "内容"],
];
foreach ($list as &$value) {
$value['content_arr'] = $this->findKeywords($keywords, $value);
}
var_export($list);
}
public function findKeywords($keywords, $value)
{
$temp = [];
$content = $value['content'];
$contentLen = mb_strlen($content);
foreach ($keywords as $key) {
$keyLen = mb_strlen($key);
$count = mb_substr_count($content, $key);
$startSearchIndex = 0;
for ($i = 0; $i < $count; $i++ ) {
$index = mb_stripos($content, $key, $startSearchIndex);
$temp[] = [
'key' => $key,
'index' => $index,
'len' => $keyLen,
];
$startSearchIndex = ($index + $keyLen);
}
}
$tempResult = [];
$sort = array_column($temp, 'index');
array_multisort($sort, SORT_ASC, $temp);
if ($temp) {
$lastIndex = 0;
$tempCount = count($temp);
foreach ($temp as $k => $v) {
$key = $v['key'];
$index = $v['index'];
$len = $v['len'];
if ($index != $lastIndex) {
$tempResult[] = [
'content' => mb_substr($content, $lastIndex, ($index - $lastIndex)),
'high' => 0
];
}
$tempResult[] = [
'content' => $key,
'high' => 1
];
$lastIndex = ($index + $len);
if ((($k + 1) == $tempCount) && ($lastIndex != $contentLen)) {
$tempResult[] = [
'content' => mb_substr($content, $lastIndex),
'high' => 0
];
}
}
} else {
$tempResult[] = [
'content' => $content,
'high' => 0
];
}
return $tempResult;
}
三、打印
array (
0 =>
array (
'name' => '内容第一行',
'content' => '你好艾希你你好啊,你好好啊,你真的明明好啊,眼睛亮晶晶的,nihao',
'content_arr' =>
array (
0 =>
array (
'content' => '你好',
'high' => 1,
),
1 =>
array (
'content' => '艾希你',
'high' => 0,
),
2 =>
array (
'content' => '你好',
'high' => 1,
),
3 =>
array (
'content' => '啊',
'high' => 1,
),
4 =>
array (
'content' => ',',
'high' => 0,
),
5 =>
array (
'content' => '你好',
'high' => 1,
),
6 =>
array (
'content' => '好',
'high' => 0,
),
7 =>
array (
'content' => '啊',
'high' => 1,
),
8 =>
array (
'content' => ',你真的明明好',
'high' => 0,
),
9 =>
array (
'content' => '啊',
'high' => 1,
),
10 =>
array (
'content' => ',眼睛',
'high' => 0,
),
11 =>
array (
'content' => '亮晶晶',
'high' => 1,
),
12 =>
array (
'content' => '的,nihao',
'high' => 0,
),
),
),
1 =>
array (
'name' => '内容第二行',
'content' => 'Hello,请别走走停停,休息一下说道说道,漂亮的梳妆匣梳妆匣梳妆匣送给你,如沐春风如沐春风',
'content_arr' =>
array (
0 =>
array (
'content' => 'Hello,请别走走停停,休息一下',
'high' => 0,
),
1 =>
array (
'content' => '说道',
'high' => 1,
),
2 =>
array (
'content' => '说道',
'high' => 1,
),
3 =>
array (
'content' => ',漂亮的',
'high' => 0,
),
4 =>
array (
'content' => '梳妆匣',
'high' => 1,
),
5 =>
array (
'content' => '梳妆匣',
'high' => 1,
),
6 =>
array (
'content' => '梳妆匣',
'high' => 1,
),
7 =>
array (
'content' => '送给你,如沐春风如沐春风',
'high' => 0,
),
),
),
2 =>
array (
'name' => '内容第三行',
'content' => '欲穷千里目,更上一层楼',
'content_arr' =>
array (
0 =>
array (
'content' => '欲穷千里目,更上',
'high' => 0,
),
1 =>
array (
'content' => '一层楼',
'high' => 1,
),
),
),
3 =>
array (
'name' => '内容第四行',
'content' => '合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下',
'content_arr' =>
array (
0 =>
array (
'content' => '合抱',
'high' => 0,
),
1 =>
array (
'content' => '之',
'high' => 1,
),
2 =>
array (
'content' => '木,生于毫末;九层',
'high' => 0,
),
3 =>
array (
'content' => '之',
'high' => 1,
),
4 =>
array (
'content' => '台,起于累土;千里',
'high' => 0,
),
5 =>
array (
'content' => '之',
'high' => 1,
),
6 =>
array (
'content' => '行,始于足下',
'high' => 0,
),
),
),
4 =>
array (
'name' => '内容第四行',
'content' => '内容',
'content_arr' =>
array (
0 =>
array (
'content' => '内容',
'high' => 0,
),
),
),
)
四、相关链接