Búsqueda en Arrays de PHP: Guía Completa
array_search() en PHP encuentra la posición de un valor en un array y devuelve su clave. Aprende sintaxis, comparación estricta y casos de uso.
array_search() encuentra el primer elemento de un array igual a un valor dado y devuelve la clave de ese elemento. Si no hay coincidencia, devuelve false. Úsala cuando tengas un valor y necesites saber dónde se encuentra en el array — por ejemplo, el índice que pasarías a unset(), array_splice() o una consulta posterior.
Funciona tanto con arrays indexados como con arrays asociativos, y devuelve la clave real, que puede ser un 0, un entero no secuencial o un string. Esta página cubre la sintaxis, la comparación laxa vs. estricta, el problema de false vs. 0, cómo encontrar todas las coincidencias (no solo la primera) y cuándo conviene usar in_array() o array_keys() en su lugar.
Sintaxis
array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false$needle— el valor que se busca.$haystack— el array en el que se busca.$strict— opcional. Cuando esfalse(valor predeterminado), los valores se comparan de forma laxa (==), por lo que0,"0",0.0e inclusofalsepueden coincidir entre sí. Cuando estrue, la comparación es estricta (===) y solo coincide cuando tipo y valor son idénticos. Pasa siempretruecuando el array contiene tipos mixtos.
La función devuelve la clave del primer elemento coincidente, o false si el valor no está presente.
Uso básico
El caso más sencillo: buscar en un array indexado e imprimir la clave donde se encuentra el valor.
Aquí 3 se encuentra en el índice 2, por lo que el script imprime Value was found at key: 2. Ten en cuenta que array_search() devuelve la clave real, no la posición — en un array reindexado o asociativo ambas cosas no son lo mismo.
Búsqueda en arrays asociativos
array_search() es más útil en arrays asociativos, donde devuelve una clave string que puedes usar para acceder a datos relacionados:
<?php
$users = [
"admin" => "Alice",
"editor" => "Bob",
"viewer" => "Cara",
];
$role = array_search("Bob", $users);
echo "Bob's role is: $role"; // editor
?>Esto imprime Bob's role is: editor. Si solo necesitas saber si existe un valor — no su clave — prefiere in_array(), que es más claro y ligeramente más rápido.
Comparación estricta vs. laxa
Por defecto, array_search() compara de forma laxa (==), lo que puede producir coincidencias sorprendentes cuando los tipos difieren. Pasar true como tercer argumento fuerza la comparación estricta (===) para que el tipo también deba coincidir:
En este ejemplo hemos creado un array llamado $array que contiene cinco elementos, incluido el valor string "3". A continuación establecemos en 3 el valor que queremos buscar en el array. La función array_search() se usa para buscar el valor en el array con el parámetro strict establecido en true. El resultado se almacena en la variable $result. Por último, usamos una sentencia if para comprobar si el valor se encontró en el array o no. Si se encontró, se muestra la clave. Si no se encontró, se muestra un mensaje indicando que el valor no está en el array. Ten en cuenta que array_search() devuelve false cuando no encuentra el valor. Como 0 es una clave válida, debes usar la comparación estricta (=== false) para distinguir correctamente entre un resultado "no encontrado" y una clave con valor 0.
La trampa de false vs. 0
El error más frecuente con array_search() es malinterpretar su valor de retorno. Dado que un elemento encontrado puede tener legítimamente la clave 0, y "no encontrado" devuelve false, una comprobación laxa como if (!$result) trata ambas situaciones igual. Compara siempre con === false:
<?php
$names = ["Alice", "Bob", "Cara"];
// Alice is at key 0 — a real result, but falsy!
$key = array_search("Alice", $names);
if ($key === false) {
echo "Not found";
} else {
echo "Found at key: $key"; // Found at key: 0
}
?>Esto imprime Found at key: 0. Un ingenuo if (!$key) habría reportado erróneamente "Not found".
Encontrar todas las claves coincidentes
array_search() se detiene en la primera coincidencia. Para obtener las claves de todos los elementos iguales a un valor, usa array_keys() con su argumento de búsqueda opcional:
<?php
$scores = [10, 20, 30, 20, 50];
echo array_search(20, $scores); // 1 (first match only)
echo "\n";
print_r(array_keys($scores, 20)); // Array ( [0] => 1 [1] => 3 )
?>array_search() devuelve 1, mientras que array_keys($scores, 20) devuelve todos los índices que contienen 20 (1 y 3).
Cuándo usar cada función
| Objetivo | Mejor función |
|---|---|
| Obtener la clave del primer valor coincidente | array_search() |
| Solo comprobar si un valor existe | in_array() |
| Obtener todas las claves de un valor | array_keys() |
| Comprobar si existe una clave | array_key_exists() |
Resumen
array_search() devuelve la clave del primer elemento igual a tu valor, o false si no existe ninguno. Recuerda lo esencial: pasa strict = true cuando el array mezcle tipos, comprueba siempre el resultado con === false, y recurre a in_array() o array_keys() cuando necesites una respuesta sí/no o todas las claves coincidentes.