php - 如何使用数组中的 preg_grep 查找仅/更多指定字母的单词?
问题描述
我有用于从具有指定字母的数组中搜索单词的示例函数:
public static function getWords($words, $specifed_letters)
{
$pattern = is_array($specifed_letters) ? '/[' . implode("",
$specifed_letters) . ']/u' : '/[' .$specifed_letters. ']/u';
$result = preg_grep($pattern, $array_words);
return $result;
}
示例用法:
$words = ["apple", "sample", "app", "тоҷик", "отабек", "баҳодурбек"];
$result = getWords($words, $letters = ['l', 's']);
此示例将返回单词:apple, sample
. 因为在这个词中有字母"l"
或"s"
。
如何搜索单词中包含所有指定字母的单词?
例如,如果我添加到指定的字母"app"
,那么来自 words 数组的必须是 return words: app, apple
。
以及如何仅使用指定字母搜索单词。例如我会写 word变"app"
体。以及我如何才能在没有结果的情况下获得结果?shuffled
"pap"
"app"
"apple"
解决方案
您可以将单词字符拆分为一个数组并循环它们,并将指定字符串中的字符拆分为一个数组。
如果某个单词字符出现在指定字符串数组的字符中,则从两个数组中删除该字符。
循环完成后,验证指定字符串数组的字符中是否没有更多字符。
$words = ["apple", "sample", "app", "justappgg", "тоҷик", "отабек", "баҳодурбек", "APELCIN", "API", "pap"];
mb_internal_encoding("UTF-8");
foreach ($words as $word) {
$wordSplit = preg_split('//u', $word, null, PREG_SPLIT_NO_EMPTY);
$strSplit = preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY);
$wordSplit = array_filter($wordSplit, function ($x) use (&$strSplit) {
if (in_array(strtolower($x), array_map('strtolower', $strSplit), true)) {
$pos = array_search(strtolower($x), array_map('strtolower', $strSplit), true);
unset($strSplit[$pos]);
return false;
}
return true;
});
if (count($strSplit) === 0) {
echo "$word contains all letters of $str" . PHP_EOL;
}
}
推荐阅读
- amazon-web-services - 我如何将 AWS RDS 连接到 mysql Kubernetes Pod
- django - ImageField 需要安装 Pillow
- python - Python - 将数据插入数据库时,索引 62 处不支持的格式字符“,”(0x2c)
- ruby-on-rails - 在 Rails 6 中使用 webpack 使 jQuery UI 全局函数可用
- amazon-cognito - 使用 openid 将 blazor 与 aws cognito 集成
- java - Spring Boot JSON 序列化与父表
- sql - 定义一个变量作为查询的结果
- linux - ESXI:从虚拟机本身获取机器名称?
- java - 如何迁移房间数据库?
- c# - 如何使用单例类在 2 个视图模型之间发送 EventAggregator