Función array_combine de PHP
La función array_combine en PHP combina dos arrays en uno asociativo, usando los valores del primero como claves y los del segundo como valores.
La función array_combine() en PHP combina dos arrays simples en un único array asociativo: toma los valores del primer array como las claves y los valores del segundo array como los valores. Es la herramienta ideal cuando se tienen dos arrays paralelos — por ejemplo, una lista de nombres de columnas y una lista de valores de celda que se corresponden posición a posición — y se desea unirlos en un único mapa clave/valor.
Esta página cubre la sintaxis, el significado de cada parámetro y del valor de retorno, las reglas que se deben seguir (igual longitud, tipos de clave válidos) y los patrones más comunes en el mundo real.
Sintaxis
array_combine(array $keys, array $values): array| Parámetro | Descripción |
|---|---|
$keys | Array cuyos valores se convierten en las claves del resultado. Sus valores deben ser claves de array válidas (enteros o strings). |
$values | Array cuyos valores se convierten en los valores del resultado. |
Valor de retorno: un nuevo array asociativo construido emparejando cada elemento de $keys con el elemento de $values en la misma posición.
Desde PHP 8.0, pasar arrays de tamaños diferentes lanza un ValueError. En PHP 7.x y versiones anteriores, la función devolvía false y emitía una advertencia.
Uso básico
El caso de uso clásico es convertir dos arrays paralelos en un único mapa — aquí, nombres de productos emparejados con sus precios.
Esto producirá la siguiente salida:
Array
(
[Product 1] => 10
[Product 2] => 20
[Product 3] => 30
)La combinación se realiza por posición, no por ordenación ni por coincidencia — la primera clave se empareja con el primer valor, la segunda con el segundo, y así sucesivamente.
Construir un registro a partir de encabezados y datos
Un uso práctico frecuente es reconstruir un registro asociativo a partir de una fila de encabezados estilo CSV más una fila de datos. Así es exactamente como se puede mapear una línea de un archivo CSV analizado.
<?php
$headers = array("id", "name", "email");
$row = array(101, "Ann", "[email protected]");
$record = array_combine($headers, $row);
echo $record["name"] . " <" . $record["email"] . ">";Esto produce la salida:
Ann <[email protected]>Reglas y consideraciones
Tenga en cuenta estas restricciones:
- La longitud igual es obligatoria.
$keysy$valuesdeben tener el mismo número de elementos. En PHP 8+, una discrepancia lanza unValueError; protéjase concount($keys) === count($values)si las longitudes no se conocen de antemano. - Las claves deben ser válidas. Los valores usados como claves deben ser enteros o strings. Los flotantes se truncan a enteros, los boolean se convierten a
0/1, ynullse convierte en el string vacío"". - Las claves duplicadas se sobreescriben. Si el array
$keyscontiene valores repetidos, los pares posteriores sobreescriben a los anteriores, por lo que el resultado puede ser más corto que la entrada. Para obtener primero el conteo de claves únicas, consultearray_unique(). - Solo se usan los valores. Las claves originales de ambos arrays de entrada se ignoran — solo importan sus valores.
El siguiente ejemplo muestra cómo una clave duplicada colapsa dos entradas en una:
<?php
$keys = array("a", "b", "a");
$values = array(1, 2, 3);
print_r(array_combine($keys, $values));El último "a" => 3 sobreescribe al primero, por lo que la salida es:
Array
(
[a] => 3
[b] => 2
)Funciones relacionadas
array_merge()— une arrays añadiendo valores en lugar de emparejar claves con valores.array_flip()— intercambia las claves y los valores de un único array.array_keys()yarray_values()— la operación inversa: extrae las claves o los valores de un array asociativo.
Conclusión
array_combine() es la forma más limpia de unir dos arrays paralelos en un array asociativo, emparejándolos elemento a elemento. Recuerde las dos reglas que más confunden: los arrays deben tener la misma longitud (de lo contrario, un ValueError en PHP 8+), y las claves duplicadas se sobreescriben silenciosamente entre sí.