Размножение строк — функция генерации всех возможных значений из шаблона {}

Понадобилась такая функция, решил размять мозги. Функция понимает в качестве разделителя запятые, |,  ;. Вызов показан в конце.

<?php

function mashUp($str){
preg_match_all("/{(.*?)}/", $str, $out);
$headArr = $out[1];

for($i = 0; $i < sizeof($headArr); $i++)
{
	$valArr = preg_split("/(\||,|;|	)/", $headArr[$i]);
	($i == 0)? $sTotal = count($valArr) : $sTotal = $sTotal * count($valArr);
	$varr[] = $valArr;
}
for($i = 0; $i < $sTotal; $i++){
	$strings[$i] = $str;
}
foreach($headArr as $num => $val):
	$currPos = 0;	//позиция ключа в $varr
		for($i = 0; $i < $sTotal; $i++)
		{
			if($i == 0):
					if($num == 0)
					{
						$sChange = ( $sTotal / ( count($varr[$num]) ) );
					}
						else
					{
						($old)? $sChange = $old : $sChange = $sChange;
 						$sChange = ($sChange / (count($varr[$num])));
					}

					if(count($varr[$num]) < 2){
						$old = $sChange;
						$sChange = $sTotal;
						}
					if($num == (count($headArr) - 1))
					{
						$sChange = 1;
					}
					$sNum = $sChange;
			endif;

			if($sNum == 0){
					$sNum = $sChange - 1;
					$currPos++;
				} else {
					$sNum--;
				//$currPos++;
				}

			if($currPos > (count($varr[$num]) - 1))
			$currPos = 0;
			preg_match("/{(.*?)}/", $strings[$i], $res, PREG_OFFSET_CAPTURE, 0);
			$strings[$i] = preg_replace("!".preg_quote($res[0][0])."!si", $varr[$num][$currPos], $strings[$i]);
		}
endforeach;
return($strings);
}
$str = "some {1a|2a,3a;4a	5a} strings {1b|2b|3b} that {1c} need to {1d|2d} post {test|example|primer}";
echo maashUp($str);
?>
0.00 avg. rating (0% score) - 0 votes

Comments are closed.

css.php