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

105
Vistas
Selecciones de productos como árbol ordenado

Tengo un producto con variantes opcionales como este:

SANDALIAS

  1. Color: rojo, verde, azul
  2. Tamaño: pequeño, mediano, grande
  3. Marca: marcaX, marcaY

cada variante de producto está relacionada con un conjunto de selecciones. Ejemplo: si selecciono Color: rojo, Tamaño: grande, Marca: brandX, esto se relacionará con un producto con una identificación de 820.

La forma en que debería verse el árbol de opciones es esta:

 "optionTree": [ [ 0, 0, [ 820, 0 ] ], [ 0, [ 0, 821 ], [ 823, 0 ] ], [ [ 824, 825 ], 0, 0 ] ]

Como puede verse, hay 3 opciones de productos para elegir, por lo que la profundidad del árbol es de 3 de profundidad. cada nivel de la matriz se relaciona con una opción de producto. La primera profundidad se ocupa del Color , la segunda se ocupa del Tamaño y la tercera de la Marca (podría haber un número variable de opciones, no solo 3). Por lo tanto, recorrer toda la matriz hasta el final dará como resultado una identificación de producto que coincida con las 3 opciones. (el índice de las opciones se relaciona con los índices en la matriz 'optionTree', también se usan 0 para representar callejones sin salida)

Pregunta: ¿Cómo ordeno variantes de selección de productos en un árbol de matriz de tal manera que se relacionen con sus respectivas opciones?

digamos que tengo una serie de productos que me gustaría insertar en un árbol vacío:

 $products_to_add = [ [ "choices" => ['red', 'medium', 'brandX'], "product_id" => 820 ], [ "choices" => ['red', 'small', 'brandY'], "product_id" => 821 ], [ "choices" => ['green', 'small', 'brandX'], "product_id" => 822 ], [ "choices" => ['blue', 'large', 'brandY'], "product_id" => 823 ], ]

¿Cómo transformaría la matriz anterior en un 'árbol de opciones' coherente como el que se mostró anteriormente? (php o javascript está bien)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede usar un bucle en el que muta el árbol final a medida que avanza. Antes de iniciarlo, puede preparar una estructura de ayuda que traduzca el nombre de una variante (como "red") a un índice en el (sub)arreglo relevante de la estructura de destino. En PHP:

 $props = [ array_flip(["red", "green", "blue"]), array_flip(["small", "medium", "large"]), array_flip(["brandX", "brandY"]) ];

Luego, en el ciclo principal, puede beneficiarse de la asignación =& para hacer que un puntero recorra el árbol de resultados y agregue referencias null (prefiero esto que un 0) cuando llegue por primera vez a una rama determinada.

 $optionTree = null; foreach($products_to_add as $product) { $node =& $optionTree; foreach ($product["choices"] as $depth => $name) { if ($node == null) $node = array_fill(0, count($props[$depth]), null); $node =& $node[$props[$depth][$name]]; } $node = $product["product_id"]; } unset($node); // Safety, since it is a reference

Después de ejecutar este código, $optionTree tendrá el valor deseado.

about 4 years ago · Juan Pablo Isaza 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