php - 从单词数组中查找唯一排列,将一组单词限制为 12 个字符
问题描述
让我解释一下,我需要这个来开发一个基于一组预先定义的单词的独特的标题生成器。
例如,我有这个单词列表:
$list = ['苹果','香蕉','梨'];
我的标题大小有限,例如:1 个字符如果我生成所有排列的列表,我将拥有:
apple
banana
pear
apple banana
apple pear
apple banana pear
banana apple
banana pear
banana apple pear
pear apple
pear banana
pear banana apple
但我不想要这个,任何规则是:单词不能在另一组单词中再次重复,我只想要最大的一组单词 <= 12 个字符
结果将是:
apple banana
apple pear
banana pear
我已经尝试了以下解决方案,但这些都没有帮助:
我有这段代码,但它没有按照我的意愿删除重复项
public static function search_get_combos($array = array(), $maxCaracters=12) {
sort($array);
$terms = array();
for ($dec = 1; $dec < pow(2, count($array)); $dec++) {
$curterm = array();
foreach (str_split(strrev(decbin($dec))) as $i => $bit) {
if ($bit) {
$curterm[] = $array[$i];
}
}
if (!in_array($curterm, $terms) && count($curterm) > 1) {
$title = implode(' ', $curterm);
if (strlen($title) <= $maxCaracters){
$terms[$title] = $curterm;
}
}
}
return $terms;
}
输出:
array(6) {
["Apple"]=>
array(1) {
[0]=>
string(5) "Apple"
}
["Banana"]=>
array(1) {
[0]=>
string(6) "Banana"
}
["Apple Banana"]=>
array(2) {
[0]=>
string(5) "Apple"
[1]=>
string(6) "Banana"
}
["Pear"]=>
array(1) {
[0]=>
string(4) "Pear"
}
["Apple Pear"]=>
array(2) {
[0]=>
string(5) "Apple"
[1]=>
string(4) "Pear"
}
["Banana Pear"]=>
array(2) {
[0]=>
string(6) "Banana"
[1]=>
string(4) "Pear"
}
}
解决方案
你是这个意思吗?
<?php
$list = ['apple', 'banana', 'pear', 'a'];
$result = [];
foreach($list as $k => $v) {
unset($list[$k]);
foreach($list as $subv) {
$word_combination = $v.' '.$subv;
if (strlen($word_combination) >= 10) {
array_push($result, $v.' '.$subv);
}
}
}
print_r($result);
print(implode(' ', $result));
输出:
Array
(
[0] => apple banana
[1] => apple pear
[2] => banana pear
)
apple banana apple pear banana pear
我不明白
我只想要最大的一组词 <= 10 个字符
您的意思是apple banana
必须超过 10 个字符(apple banana
= 12 个字符)?如果是,我添加了检查。例如apple a
(7 个字符)将被忽略。
推荐阅读
- javascript - 通过根组件中的 React Context 传递 Redux 存储是否正确?
- java - 无法通过 Java API 在 Rally 中更新用户故事
- c# - 如何在实时图表中隐藏背景网格线?
- kubernetes - Openshift:获取当前的 pod 名称
- python - Python中的正则表达式
- android - Android更改edittext的默认“粘贴”弹出文本颜色
- amazon-web-services - AWS ECS - 在一个 ALB 中注册多个 ECS 集群
- git - 让 Git 日志统计数据有自己的列?
- android - Flutter 应用程序:导航到下一个屏幕时需要终止屏幕
- python - 为什么 numpy 1.14 轮 float16 65504 到 65500