Понадобилась такая функция, решил размять мозги. Функция понимает в качестве разделителя запятые, |, ;. Вызов показан в конце.
<?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); ?>
Comments are closed.