W3docs

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 es false (valor predeterminado), los valores se comparan de forma laxa (==), por lo que 0, "0", 0.0 e incluso false pueden coincidir entre sí. Cuando es true, la comparación es estricta (===) y solo coincide cuando tipo y valor son idénticos. Pasa siempre true cuando 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.

php— editable, runs on the server

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:

php— editable, runs on the server

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

ObjetivoMejor función
Obtener la clave del primer valor coincidentearray_search()
Solo comprobar si un valor existein_array()
Obtener todas las claves de un valorarray_keys()
Comprobar si existe una clavearray_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.

Práctica

Práctica
¿Qué hace la función array_search() en PHP?
¿Qué hace la función array_search() en PHP?
Was this page helpful?