Esta pregunta ya fue hecha/respondida por otros miembros pero mi caso es un poco diferente ...Cómo invertir palabras en una cadena?
Problema: ¿Cómo revertir palabras en una cadena? Puede usar strpos(), strlen(), substr() pero no otras funciones muy útiles como explode(), strrev() etc.
Esto es básicamente una pregunta de entrevista, así que necesito demostrar la capacidad de manipular cadenas .
Ejemplo:
$ cadena = "Soy un muchacho"
Respuesta:
"I m un gamberro"
A continuación es mi solución que me llevó 2 días (suspiro) pero tiene que haber una solución más elegante. Mi código parece muy largo ...
¡Gracias de antemano!
Mi intención:
1. get number of word
2. based on number of word count, grab each word and store into array
3. loop through array and output each word in reverse order
Código:
<?php
$str = "I am a boy";
echo reverse_word($str) . "\n";
function reverse_word($input) {
//first find how many words in the string based on whitespace
$num_ws = 0;
$p = 0;
while(strpos($input, " ", $p) !== false) {
$num_ws ++;
$p = strpos($input, ' ', $p) + 1;
}
echo "num ws is $num_ws\n";
//now start grabbing word and store into array
$p = 0;
for($i=0; $i<$num_ws + 1; $i++) {
$ws_index = strpos($input, " ", $p);
//if no more ws, grab the rest
if($ws_index === false) {
$word = substr($input, $p);
}
else {
$length = $ws_index - $p;
$word = substr($input, $p, $length);
}
$result[] = $word;
$p = $ws_index + 1; //move onto first char of next word
}
print_r($result);
//append reversed words
$str = '';
for($i=0; $i<count($result); $i++) {
$str .= reverse($result[$i]) . " ";
}
return $str;
}
function reverse($str) {
$a = 0;
$b = strlen($str)-1;
while($a < $b) {
swap($str, $a, $b);
$a ++;
$b --;
}
return $str;
}
function swap(&$str, $i1, $i2) {
$tmp = $str[$i1];
$str[$i1] = $str[$i2];
$str[$i2] = $tmp;
}
?>
¿Nos ha respondido una pregunta de la entrevista para usted? :( –
FWIW, el código me parece bien –
@Ian P: Él ya lo respondió. Él pregunta si hay una forma más elegante de hacerlo. – webbiedave