我正在尝试找出使用多个排序规则进行字符串替换的最佳方法。
我有一个由用户插入的句子,我有一个数组,其中包含该句中所有拼写错误的单词及其可能的更正。
$sentence = 'i want to recovary my vehical from the cabs';
我想显示以下内容:
代码:
$element = array(
"vehical" => array('vehicle'),
"recovary" => array('recovery', 'recover', 'revary')
);
$sentence = 'i want to recovary my vehical from the cabs';
foreach($element as $i => $val){
echo $i;
}
编辑:扩展了另一种情况:
如果顶部数组中存在多个变体,会发生什么。
"vehical" => array('vehicle', 'vehiclesy', 'whatever'),
"recovary" => array('recovery', 'recover', 'revary')
答案 0 :(得分:2)
尝试使用str_replace()之类的,
$str='';
foreach($element as $search => $combinations){
foreach($combinations as $comb){
$str.=str_replace($search,$comb,$sentence)."\n";
}
}
echo $str;
尝试创建函数并创建所有可能组合的数组,然后使用结果数组替换它,如
$element = array(
"vehical" => array('vehicle', 'vehiclesy', 'whatever'),
"recovary" => array('recovery', 'recover', 'revary')
);
$sentence = 'i want to recovary my vehical from the cabs';
// change the array using loop for replacement
function makeCombinations($combinations, $values)
{
$res = array();
$i=0;
foreach($combinations as $comb) {
foreach($values as $value) {
$res[$i] = is_array($comb) ? $comb : array($comb);
$res[$i][] = $value;
$i++;
}
}
return $res;
}
$searchArr = array();
foreach($element as $search => $values) {
$searchArr[] = $search;
$combinations = isset($combinations) ? makeCombinations($combinations, $values) : $values;
}
// finally replace the strings
foreach($combinations as $combination){
echo str_replace($searchArr, $combination, $sentence),"\n";
}
答案 1 :(得分:2)
使用秒(foreach和str_replace())尝试以下解决方案:
//the items with replacement values.
$items = array(
"vehical" => array('vehicle', 'vehiclesy', 'whatever'),
"recovary" => array('recovery', 'recover', 'revary'),
"cabs" => array('cups', 'cips'),
"from" => array(1, 2)
);
//init the initial sentence and the array with all solutions.
$sentence = 'i want to recovary my vehical from the cabs';
$solution = [];
//run through all keywords to execute the replacements.
foreach ($items as $item => $value) {
if (count($value) > 0) {
if (count($solution) > 0) {
$solution = getReplacements($solution, $item, $value);
} else {
$solution = getReplacements($sentence, $item, $value);
}
}
}
//output the solutions.
array_walk_recursive($solution, 'output');
function output(&$item,$key) {
echo $item."\n";
}
/**
* Function to execute the replacements.
* @param array|string $sentence An array or string on which the replacements should execute.
* @param string $item The word which will be replaced.
* @param array $values The replacement values for the item.
* @return array An array with all solutions of this function.
*/
function getReplacements($sentence, $item, $values)
{
$solutions = [];
foreach ($values as $value) {
$sol = str_replace($item, $value, $sentence);
if (is_array($sol)) {
$solutions = array_merge($solutions, $sol);
} else {
$solutions[] = $sol;
}
}
return $solutions;
}
答案 2 :(得分:2)
您需要创建替换数据的所有唯一组合。对于这些组合中的每一种,您都可以进行替换。这是一种方法:
<?php
function createCombinations(array $input)
{
$head = array_shift($input);
$tail = count($input) > 1 ? createCombinations($input) : array_shift($input);
$combinations = [];
foreach ($head as $left) {
foreach ($tail as $right) {
$combinations[] = array_merge([$left], (array) $right);
}
}
return $combinations;
}
$element = [
'vehical' => ['vehicle', 'car'],
'recovary' => ['recovery', 'recover', 'revary'],
'cubs' => ['cabs'],
];
$sentence = 'i want to recovary my vehical from the cubs';
$from = array_keys($element);
foreach (createCombinations($element) as $to) {
echo str_replace($from, $to, $sentence), "\n";
}
# => i want to recovery my vehicle from the cabs
# => i want to recover my vehicle from the cabs
# => i want to revary my vehicle from the cabs
# => i want to recovery my car from the cabs
# => i want to recover my car from the cabs
# => i want to revary my car from the cabs