1
PHP / Re:comparar 2 string para ver si son anagramas
« en: 28 de Noviembre de 2015, 02:37:41 am »
Hola,
Me he tomado la libertad de hacer un pequeño script de 0 y está preparado para trabajar desde PHP CLI con los dos primeros parametros pasado por argumento $argv[1] y $argv[2] (obviamos $argv[0] que es el nombre del fichero). Les he dado el valor $first y $second (como primera y segunda palabra) para que puedas modificarlo fácilmente a un $_POST.
Es bastante más simple de lo que estabas planteando, te resumo un poco lo que realiza este pequeño script:
Aquí el código:
<?php
?>
Me he tomado la libertad de hacer un pequeño script de 0 y está preparado para trabajar desde PHP CLI con los dos primeros parametros pasado por argumento $argv[1] y $argv[2] (obviamos $argv[0] que es el nombre del fichero). Les he dado el valor $first y $second (como primera y segunda palabra) para que puedas modificarlo fácilmente a un $_POST.
Es bastante más simple de lo que estabas planteando, te resumo un poco lo que realiza este pequeño script:
- Primero:
Comprueba si la longitud de los strings son lo mismo - Segundo:
Convierte las cadenas en array (cada letra es un valor). - Tercero:
Hacemos un sort para ordenar alfabéticamente ambos arrays. - Cuarto:
Recorremos todos los valores del primer array y comparamos con el segundo array llamando a su valor correspondiente mediante el key del primer array. (al haber comprobado la longitud del ambas strings siempre vamos a tener los mismos valores para el primer array como para el segundo). Para cada valor del array recorrido comprobamos si las letras del primer y segundo array son diferentes, si es así retornamos falso sino, continuamos con el siguiente valor. Al finalizar devolvemos true, así, en caso de que no haya sido falso devolverá verdadero. - Quinto:
Mostramos al usuario un mensaje tras haber hecho la comprobación.
Aquí el código:
<?php
$first = $argv[1];
$second = $argv[2];
function str2array($str) {
$tmp = [];
for($i=0;$i<strlen($str);$i++) {
$tmp[] = $str[$i];
}
return $tmp;
}
function compareArrayValues($origin, $tocompare) {
foreach($origin as $k=>$v) {
$v2 = $tocompare[$k];
if($v != $v2) return false;
}
return true;
}
if(strlen($first) != strlen($second)) {
throw new ErrorException("Las palabras no coinciden en longitud.");
} else {
$s_first = str2array($first);
sort($s_first);
$s_second = str2array($second);
sort($s_second);
if(compareArrayValues($s_first,$s_second)) {
echo "Sí, son anagramas.";
} else echo "No, no son anagramas";
}
echo PHP_EOL;
?>