ASP a PHP ... simplificando el código php [cerrado]

estoy convirtiendo algo de codificación asp a php, por lo que he hecho en php, ¿hay una mejor manera de simplificar las cosas para no escribir una línea adicional de codificación?

áspid

xFirstName = LCase(Replace(request.form("xFirstName"), "'", "''"))
xFirstName = UCase(Left(xFirstName,1))& Mid(xFirstName,2)

php

$xFirstName = strtolower(str_replace("'","''",$_POST["xFirstName"]));
$xFirstName = strtoupper(substr($xFirstName,0,1)).substr($xFirstName,1);

preguntado el 03 de mayo de 12 a las 16:05

Esto se adapta mejor a codereview.stackexchange.com -

3 Respuestas

strtoupper(substr($xFirstName,0,1)).substr($xFirstName,1);

puede ser reemplazado efectivamente con solo

ucfirst($xFirstName)

En cuanto a la primera línea, aún se requiere: primero hacer que la cadena esté en minúsculas. Aunque haría que str_replace sea la operación final, ya que puede aumentar un poco la longitud de la cadena. ) Así que se convierte en algo como...

$xFirstName = str_replace("'", "''", 
    ucfirst(strtolower($_POST['xFirstName']))
);

contestado el 03 de mayo de 12 a las 16:05

Although I'd make the str_replace the final operation, as it may increase length of the string somewhat. - No un malos sugerencia como tal, pero definitivamente cae bajo el paraguas de la microoptimización. - DaveRandom

Si la microoptimización no se interpondrá en el camino de la legibilidad, ¿por qué ignorarla? ) ucfirst + strtolower es un idioma único, escapar de la cita es otro, al menos para mí. ) - lluvia77ow

De acuerdo, no hay una buena razón no para hacerlo, pero dudo en recomendar ese tipo de cosas a otros en caso de que les haga verter miles de líneas de código haciendo miles de cambios que les ganen un total de 10ms. Como digo, no es un malos sugerencia y después de tu edición con la frase completa, creo que te mereces este sabroso +1 - DaveRandom

Ah, ahora veo tu punto. ) Por supuesto, la diferencia sería insignificante; dudo que haga incluso 10 ms. )) Gracias por tus comentarios y tu +1. - lluvia77ow

Parece que desea reemplazar las comillas simples con comillas dobles y poner en mayúscula la primera letra de la palabra, lo que podría hacer con:

ucwords(strtolower(str_replace("'","''", $_POST['xFirstName'])));

Esto pondrá en mayúscula la primera letra de cada palabra que se pasa en la variable $_POST, por lo que si solo desea que la primera palabra esté en mayúscula, independientemente de cuántas palabras estén presentes en xFirstName, debe usar ucfirst() en lugar de ucwords().

contestado el 03 de mayo de 12 a las 16:05

Todavía necesitas strtolower() antes ucwords(), y para que coincida exactamente con el código original, debe usar ucfirst(), Desde ucwords() tiene en cuenta los límites de las palabras, cosa que no hace el código OP. - DaveRandom

Tienes razón, he editado para reflejar tus puntos. - usuario622367

El problema será con los nombres. Peter O'Hara or Peter Clayton-Moore etc cuando se utiliza la función ucwords Terminarás con Peter O'hara or Peter Clayton-moore.

La mejor solución es escribir una función propia como esta:

public function my_ucwords($name) {
    $name = ucwords(str_replace('\'', '\' ', str_replace('-', '- ', $name)));
    return str_replace('\' ', '\'', str_replace('- ', '-', $name));
}

Y luego continúa con esto:

$xFirstName = str_replace("'","''", my_ucwords(mb_strtolower($_POST["xFirstName"])));

¡De nada!

contestado el 03 de mayo de 12 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.