$string = '[He|She] would [like|love|hate] to [Play Golf|Play Tennis|Play Baseball] Today.';
$parts = explode("]", $string);
$newparts = array();
$loops = array();
foreach($parts as $part){
if(strpos($part, '[') !== false){
$part = preg_replace("#([^\[]+)?\[#", "", $part);
$loops[] = explode("|", $part);
}
}
//matching other words
$words = preg_replace("#\[(.*?)\]#", '', $string);
$words = preg_replace("#\s+#", '|', trim($words));
$words = explode("|", $words);
foreach($loops as $key => &$val){
foreach($val as &$word){
$word = $word.' '.$words[$key];
}
}
$data =array();
$eval = '
$data =array();
';
$eval_blocks = '';
$eval_foreach = '';
$eval_data = '
$data[] = ';
$looplength = count($loops);
for($i=0; $i<$looplength; $i++){
$eval_foreach.= '
foreach($loops['.$i.'] as $val'.($i+1).'){
';
if( ($i+1) == $looplength ){
$eval_data .= ' $val'.($i+1).';';
}else{
$eval_data .= ' $val'.($i+1).' ." ".';
}
$eval_blocks .= '
}
';
}
$eval = $eval. $eval_foreach . $eval_data . $eval_blocks;
echo "<hr>";
print_r($words);
print_r($loops);
print_r($data);
出力:
Array
(
[0] => would
[1] => to
[2] => Today.
)
Array
(
[0] => Array
(
[0] => He would
[1] => She would
)
[1] => Array
(
[0] => like to
[1] => love to
[2] => hate to
)
[2] => Array
(
[0] => Play Golf Today.
[1] => Play Tennis Today.
[2] => Play Baseball Today.
)
)
Array
(
[0] => He would like to Play Golf Today.
[1] => He would like to Play Tennis Today.
[2] => He would like to Play Baseball Today.
[3] => He would love to Play Golf Today.
[4] => He would love to Play Tennis Today.
[5] => He would love to Play Baseball Today.
[6] => He would hate to Play Golf Today.
[7] => He would hate to Play Tennis Today.
[8] => He would hate to Play Baseball Today.
[9] => She would like to Play Golf Today.
[10] => She would like to Play Tennis Today.
[11] => She would like to Play Baseball Today.
[12] => She would love to Play Golf Today.
[13] => She would love to Play Tennis Today.
[14] => She would love to Play Baseball Today.
[15] => She would hate to Play Golf Today.
[16] => She would hate to Play Tennis Today.
[17] => She would hate to Play Baseball Today.
)
更新: 動的に作成されたループ。
デモ: http://codepad.org/eeQd9S0r