PHPIntermedio2 nov 2025

¡Max() al revés! Cuando los números pierden contra las letras

snippet.php
<?php
$stringTen = "10";
$stringTwo = "2";
$numberTwo = 2;

// Escenario 1: Ambos argumentos son strings
$maxStrings = max($stringTen, $stringTwo);

// Escenario 2: Un argumento es un número, el otro un string
$maxMixed = max($stringTen, $numberTwo);

echo "Max de \"$stringTen\" y \"$stringTwo\": " . $maxStrings . "\n";
echo "Max de \"$stringTen\" y $numberTwo: " . $maxMixed . "\n";
?>

¿Qué crees que imprime?

Salida Esperada

Max de "10" y "2": 10
Max de "10" y 2: 10

⚠️ Salida Real

Max de "10" y "2": 2
Max de "10" y 2: 10

¿Por qué pasa esto?

¡Prepárense para la magia oscura de PHP! ✨ Aquí `max()` juega con nuestras expectativas: - Cuando **TODOS** los argumentos de `max()` son **strings**, PHP los compara como si fueran palabras en un diccionario. ¡Sí, **lexicográficamente**! 📚 Así, "2" es 'mayor' que "10" porque el carácter '2' viene después del carácter '1'. ¡Totalmente contraintuitivo para números! 🤯 - Pero si **AL MENOS UNO** de los argumentos es un **número** (entero o flotante), ¡PHP se pone serio! Convierte **todos** los argumentos a números y hace una comparación **numérica** de verdad. 🤓 Es como si `max()` tuviera doble personalidad: un día es un bibliotecario que ordena por orden alfabético, y al día siguiente es un matemático que compara valores reales. ¡Cuidado con el bouncer de tipos de PHP! 👮‍♂️

Conceptos relacionados

type-jugglingcomparisonmax-function