Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

248
Vistas
array_search() no hace coincidir números con puntos

hago traductor de cifrado. Tengo un problema con la traducción de caracteres cifrados que terminan en puntos. Tengo el siguiente diccionario:

 $dict = array( "I"=>"1", "L"=>"1.", "O"=>"0", "Q"=>"0.", "Z"=>"2", "?"=>"2." );

Cuando uso esto:

 function decode($cypher,$dict){ $sepp = explode(" ",$cypher); foreach($sepp as $char){ echo array_search($char,$dict); }} decode("1. 0. 2.",$dict);

Estoy obteniendo:

 IOZ

En lugar de lo esperado:

 LQ?
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

De forma predeterminada, array_search realiza la misma comparación que el operador == , que intentará "escribir malabarismos" con ciertos valores. Por ejemplo, '1' == 1 , '1.' == 1 y '1.' == '1' son todos verdaderos.

Eso significa que '1' y '1.' siempre coincidirá con el mismo elemento en su tabla de búsqueda.

Afortunadamente, la función toma un tercer argumento, que el manual describe como:

Si el tercer parámetro strict se establece en true , la función array_search() buscará elementos idénticos en el haystack . Esto significa que también realizará una comparación de tipo estricta de la needle en el haystack , y los objetos deben ser la misma instancia.

Esto lo hace equivalente al operador === en su lugar. Tenga en cuenta que '1' === 1 , '1.' === 1 y '1.' === '1' son todos falsos.

Entonces solo necesitas agregar ese argumento:

 echo array_search($char,$dict,true);
over 4 years ago · Santiago Trujillo Denunciar

0

Solo necesitas hacer una búsqueda estricta.

Consulte el tercer parámetro de array_search.

 function decode($cypher,$dict){ $sepp = explode(" ",$cypher); foreach($sepp as $char){ echo array_search($char,$dict,true); } }

La razón por la que no funciona es porque php piensa que 1 y 1 son el mismo número.

over 4 years ago · Santiago Trujillo Denunciar

0

Esta línea te ayudaría. Establezca el tercer parámetro en true . Esto hace que la comparación se ejecute en modo estricto.

echo array_search($char, $dict, true);

 function decode($cypher, $dict) { $sepp = explode(" ",$cypher); foreach ($sepp as $char) { echo array_search($char, $dict, true); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda