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