Replacing a string with multiple lines

I am trying to find a better way to switch to replacing strings with multiple sorts.

I have a sentence that is inserted by the user, I have an array, which of all the missing words in this sentence and their possible corrections.

$sentence = 'i want to recovary my vehical from the cabs';

I want to display the following:

  • I want to restore my car from the cab.
  • I want to get my car back from the cab.
  • I want to review my car from the cab.

Code so far:

 $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; } 

EDIT: expanded another scenario:

What happens if there were several options in the top array.

  "vehical" => array('vehicle', 'vehiclesy', 'whatever'), "recovary" => array('recovery', 'recover', 'revary') 
  • I want to restore my car from the cab.
  • I want to restore my car from the cab.
  • I want to restore everything from the cockpit
  • I want to get my car back from the cab.
  • I want to restore my car from the cab.
  • I want to regain everything from the cockpit
  • I want to review my car from the cab.
  • I want to review my vehicles from cabs.
  • I want to respond to everything from the cockpit
+7
arrays loops php
source share
3 answers

You need to create all the unique combinations of replacement data. For each of these combinations, you can perform a replacement. This is one way to do this:

 <?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 

demo: https://ideone.com/LERb9X

+2
source share

Try using str_replace () as,

 $str=''; foreach($element as $search => $combinations){ foreach($combinations as $comb){ $str.=str_replace($search,$comb,$sentence)."\n"; } } echo $str; 

Demo

Try to make functions and create an array from all possible combinations, then replace it with the resulting array, for example,

 $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"; } 

Demo

+2
source share

Try the following solution using seconds (foreach and 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; } 

Demo: https://ideone.com/X2Pg1R

+2
source share

All Articles