0

0

PHP高效提取两个字符串中的公共单词

花韻仙語

花韻仙語

发布时间:2025-12-07 19:38:02

|

364人浏览过

|

来源于php中文网

原创

PHP高效提取两个字符串中的公共单词

本教程旨在介绍如何在php中高效地从两个给定字符串中提取所有共同的单词。我们将探讨一种避免传统循环、利用内置函数快速实现此目标的方法,通过实际代码示例展示如何比较源字符串与用户字符串,并输出它们共有的词汇,从而优化字符串处理效率。

引言

在PHP开发中,经常会遇到需要对字符串进行处理和分析的场景。其中一个常见的需求是,从两个给定的字符串中找出所有共同存在的单词。例如,你可能有一个原始文本字符串和一个用户输入的字符串,需要快速识别出两者之间共享的关键词。传统的做法可能涉及嵌套循环和逐词比较,但这在处理大量数据时效率低下。本教程将展示一种更简洁、更高效的PHP实现方式。

问题描述与解决方案核心

我们的目标是,给定两个字符串,例如: $str_original = 'This is first string';$user_string = 'This is user string';

我们期望得到它们共同的单词,即: 'This is string'

解决方案的核心思想是:

  1. 将每个字符串分解(或称“分词”)成独立的单词数组。
  2. 利用PHP内置的数组函数 array_intersect() 来找出这两个单词数组的交集。
  3. 将交集结果(即共同单词数组)重新组合成一个字符串。

这种方法避免了手动循环,而是依赖于PHP底层优化过的数组操作函数,从而大大提高了效率和代码可读性

实现步骤与代码示例

我们将创建一个名为 getCommonWords 的函数来封装上述逻辑。

立即学习PHP免费学习笔记(深入)”;

Grammarly
Grammarly

Grammarly是一款在线语法纠正和校对工具,伟大的AI辅助写作工具

下载

1. 定义 getCommonWords 函数

<?php

/**
 * 从两个字符串中提取所有共同的单词。
 *
 * @param string $string1 第一个字符串。
 * @param string $string2 第二个字符串。
 * @return string 包含共同单词的字符串,单词之间以空格分隔。
 */
function getCommonWords(string $string1, string $string2): string
{
    // 步骤1: 将字符串分解为单词数组。
    // 使用 explode() 函数以空格为分隔符将字符串拆分成数组。
    // 注意:此方法默认对大小写敏感,且不处理标点符号。
    $words1 = explode(' ', $string1);
    $words2 = explode(' ', $string2);

    // 步骤2: 找出两个单词数组的交集。
    // array_intersect() 返回一个数组,其中包含所有在 $words1 和 $words2 中都存在的键值对。
    $commonWordsArray = array_intersect($words1, $words2);

    // 步骤3: 将共同单词数组重新组合成一个字符串。
    // 使用 implode() 函数以空格为连接符将数组元素连接成字符串。
    return implode(' ', $commonWordsArray);
}

// 示例用法
$str_original = 'This is first string';
$user_string = 'This is user string';

$result = getCommonWords($str_original, $user_string);

echo "原始字符串: " . $str_original . PHP_EOL;
echo "用户字符串: " . $user_string . PHP_EOL;
echo "共同单词: " . $result . PHP_EOL;

// 更多示例
echo PHP_EOL . "--- 更多示例 ---" . PHP_EOL;
$text1 = "apple banana orange grape";
$text2 = "banana kiwi orange mango";
echo "字符串1: " . $text1 . PHP_EOL;
echo "字符串2: " . $text2 . PHP_EOL;
echo "共同单词: " . getCommonWords($text1, $text2) . PHP_EOL; // 输出: banana orange

$sentence1 = "The quick brown fox jumps over the lazy dog";
$sentence2 = "A quick brown cat runs under the tree";
echo "字符串1: " . $sentence1 . PHP_EOL;
echo "字符串2: " . $sentence2 . PHP_EOL;
echo "共同单词: " . getCommonWords($sentence1, $sentence2) . PHP_EOL; // 输出: quick brown the

?>

运行上述代码,你将得到预期的输出:

原始字符串: This is first string
用户字符串: This is user string
共同单词: This is string

--- 更多示例 ---
字符串1: apple banana orange grape
字符串2: banana kiwi orange mango
共同单词: banana orange
字符串1: The quick brown fox jumps over the lazy dog
字符串2: A quick brown cat runs under the tree
共同单词: quick brown the

注意事项与进阶考量

  1. 大小写敏感性: explode() 和 array_intersect() 默认是大小写敏感的。这意味着 "String" 和 "string" 会被视为不同的单词。如果需要实现大小写不敏感的比较,可以在 explode() 之后,使用 array_map('strtolower', $words) 将所有单词转换为小写,然后再进行交集运算。

    function getCommonWordsCaseInsensitive(string $string1, string $string2): string
    {
        $words1 = array_map('strtolower', explode(' ', $string1));
        $words2 = array_map('strtolower', explode(' ', $string2));
        $commonWordsArray = array_intersect($words1, $words2);
        return implode(' ', $commonWordsArray);
    }
    
    $str1_ci = 'This is First String';
    $str2_ci = 'This is user string';
    echo "大小写不敏感共同单词: " . getCommonWordsCaseInsensitive($str1_ci, $str2_ci) . PHP_EOL; // 输出: this is string
  2. 标点符号处理: 当前的 explode(' ', ...) 方法仅仅以空格作为分隔符。如果字符串中包含逗号、句号、问号等标点符号,它们将与单词一起被视为一个整体(例如 "string." 会与 "string" 不同)。对于更复杂的文本处理,建议使用 preg_split() 结合正则表达式来更精确地分词,去除标点符号并处理多种分隔符。

    function getCleanWords(string $text): array
    {
        // 使用正则表达式匹配非字母数字字符作为分隔符,并去除空字符串
        return array_filter(preg_split('/[^a-zA-Z0-9]+/', $text, -1, PREG_SPLIT_NO_EMPTY));
    }
    
    function getCommonWordsAdvanced(string $string1, string $string2): string
    {
        $words1 = array_map('strtolower', getCleanWords($string1));
        $words2 = array_map('strtolower', getCleanWords($string2));
        $commonWordsArray = array_intersect($words1, $words2);
        return implode(' ', array_unique($commonWordsArray)); // array_unique确保输出的单词不重复
    }
    
    $text_advanced1 = "Hello, world! This is a test string.";
    $text_advanced2 = "World, this is another test.";
    echo "高级共同单词: " . getCommonWordsAdvanced($text_advanced1, $text_advanced2) . PHP_EOL; // 输出: world this is a test
  3. 性能考量: 对于大多数常见应用场景,explode() 和 array_intersect() 的组合已经足够高效。PHP的内置函数通常由C语言实现,性能经过高度优化。对于处理非常巨大的文本文件或极长的字符串,可以考虑分块处理或使用专门的文本处理库。

总结

通过利用PHP的 explode()、array_intersect() 和 implode() 函数,我们可以非常高效且简洁地实现两个字符串之间公共单词的提取。这种方法不仅代码量少,而且性能优越,是处理此类字符串匹配问题的推荐实践。在实际应用中,根据具体需求(如是否需要大小写不敏感、如何处理标点符号等),可以对上述基础函数进行适当的扩展和优化,以满足更复杂的文本分析场景。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

410

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

636

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

362

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

263

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

629

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

562

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

668

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

618

2023.09.22

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

22

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号