enfoque recursivo:
function iterate($words) {
if(($total = count($words)) > 0) {
$str = '';
for($i = 0; $i < $total; $i++) {
$str .= ' ' . $words[$i];
echo $str . PHP_EOL;
}
array_shift($words);
iterate($words);
}
}
$text = "Today is a great day.";
$words = str_word_count($text, 1);
iterate($words);
Lo anterior sólo tendrá en cuenta las palabras. No eliminará duplicados. Los números no son palabras y la puntuación tampoco. Con la oración de prueba dada de cinco palabras, el enfoque recursivo se realiza de manera descuidablemente más rápida que la solución array_splice
. Sin embargo, esto aumenta significativamente con cada palabra adicional. Un punto de referencia rápido en mi máquina con una oración de diez palabras terminó en casi la mitad del tiempo.
Aviso: Aislado puntos de referencia dependen de una serie de factores y pueden producir diferentes resultados en diferentes máquinas. En todo caso, pueden dar un indicador sobre el rendimiento del código (a menudo en el ámbito de las micro-optimizaciones), pero nada más.
estoy Seguro que hay un buen método recursivo para hacer esto. – animuson
Cómo tratar palabras duplicadas: * "Esto es fácil, ¿verdad?" *? ¿Los números se consideran palabras? ¿Qué pasa con la puntuación? – Gordon
Duplicar es fácil. Póngalos en una matriz y obtenga una matriz única. Lo que no puedo entender es cómo obtener toda la combinación en una matriz. –