Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

354
Vistas
PHP reemplaza la clave de índice de matriz con valores de otra matriz

Tengo estas 2 matrices y necesito reemplazar los índices numéricos de $productos con los índices de $columnas.

No sé si es correcto resolverlo con "bucle foreach" o con otra función de PHP.

PROBLEMA: el array devuelto debe tener el mismo número de elementos que el inicial.

 $columnas = array( "CATEGORIA", "PRODUCTO", "IMAGEN", "PRECIO", "DESCUENTO", "DISPONIBLE"); $products = array( array( "Burgers", "Doble con queso", "burger.jpg","300" ), array( "Burgers", "Triple", "burger_triple.jpg", "350", "10%", "si" ), array( "Burgers", "Triple2", "burger_triple.jpg", "380" ), array( "Burgers", "Triple3" ), );

En el ciclo, reviso ambas matrices para reemplazar los índices.

 foreach( $products as $k => $product ) { foreach($product as $t => $y){ $columnsArray[$columnas[$t]] = $y; // $product[$columnas[$t]] = $y; // Other option } $newProducts[] = $columnsArray; } print_r($newProducts);

Este es el resultado:

 Array ( [0] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Doble con queso [IMAGEN] => burger.jpg [PRECIO] => 300 ) [1] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Triple [IMAGEN] => burger_triple.jpg [PRECIO] => 350 [DESCUENTO] => 10% [DISPONIBLE] => si ) [2] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Triple2 [IMAGEN] => burger_triple.jpg [PRECIO] => 380 [DESCUENTO] => 10% <------- should not be [DISPONIBLE] => si <------- should not be ) [3] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Triple3 [IMAGEN] => burger_triple.jpg <------- should not be [PRECIO] => 380 <------- should not be [DESCUENTO] => 10% <------- should not be [DISPONIBLE] => si <------- should not be ) )
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Parece que esto es lo que buscas

 $data = []; foreach ($products as $k => $product) { $result = []; foreach ($columnas as $i => $key) { $result[$key] = (isset($product[$i]) ? $product[$i] : null); } $data[] = $result; } print_r($data);

El problema con su versión era que no estaba creando una matriz limpia dentro del ciclo, por lo que los valores faltantes permanecerían de la iteración anterior.

over 4 years ago · Santiago Trujillo Denunciar

0

Debe comenzar cada iteración del foreach anidado con un $columnsArray vacío

Tenga en cuenta que está haciendo un bucle en una matriz de productos y utilizando esas claves numéricas para indexar directamente en la matriz $columnas .

Esto puede causar una clave de matriz indefinida si hay más productos que columnas.

 foreach( $products as $k => $product ) { $columnsArray = []; foreach($product as $t => $y){ if (array_key_exists($t, $columnas)) { $columnsArray[$columnas[$t]] = $y; } } $newProducts[] = $columnsArray; } print_r($newProducts);

Producción

 Array ( [0] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Doble con queso [IMAGEN] => burger.jpg [PRECIO] => 300 ) [1] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Triple [IMAGEN] => burger_triple.jpg [PRECIO] => 350 [DESCUENTO] => 10% [DISPONIBLE] => si ) [2] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Triple2 [IMAGEN] => burger_triple.jpg [PRECIO] => 380 ) [3] => Array ( [CATEGORIA] => Burgers [PRODUCTO] => Triple3 ) )
over 4 years ago · Santiago Trujillo Denunciar

0

<?php $columnas = array( "CATEGORIA", "PRODUCTO", "IMAGEN", "PRECIO", "DESCUENTO", "DISPONIBLE"); $products = array( array( "Burgers", "Doble con queso", "burger.jpg","300" ), array( "Burgers", "Triple", "burger_triple.jpg", "350", "10%", "si" ), array( "Burgers", "Triple2", "burger_triple.jpg", "380" ), array( "Burgers", "Triple3" ), ); $newProducts = []; foreach ($products as $p) { // slice out the same number of keys from $columnas, combine into the new array $newProducts[] = array_combine(array_slice($columnas,0,count($p)),$p); } print_r($newProducts);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda