Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

113
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!