2017-11-28 11 views
1

이 프로젝트는 으로 작성되었습니다. PHP은 본질적으로 webshop이며 어떤 제품을 판매하는지 보여주는 XML을 생성해야합니다.두 배열 간의 다차원 배열 조합

이제 각 제품 자체는 높이, 색상, 모양 등과 같은 속성을 가질 수 있습니다. 각 속성은 높이와 같은 자체 속성을 가질 수 있습니다. 높이는 120cm, 150cm, 180cm 등이 될 수 있습니다.

가능한 속성 수 또는 가능한 속성 수에는 제한이 없습니다.

그렇다면이 두 배열 간의 모든 조합을 어떻게 찾을 수 있습니까?

Heres 정말 해체 된 제품 json의 예 : 모든 목적을 위해이 배열을 디코딩 된 $ 제품이라고 부릅니다.

{ 
    { 
     "product_id":"1", 
     "product_name":"Blommebladet tj\u00f8rn", 
     "product_price":"400", 
    }, 
    { 
     "product_id":"2", 
     "product_name":"Some other product", 
     "product_price":"300", 
    }, 
} 

제품 자체의 루핑은 어렵지 않습니다. 그러나 제품을 반복하면서 속성을 가져 오는 경우 제품의 모든 속성과 속성을 포함하는 새로운 배열을 반환합니다. 너무 쉽습니다.

추가 배열 처리에 대해 생각할 필요없이 모든 가능한 제품 조합이있는 제품 목록을 생성하려면 시스템이 필요합니다. 나는 새로운 제품 배열을 만들고 기존 제품을 복사하고 기존 정보에 속성/속성을 추가하여 정보를 강조했다.

속성/속성에서 버전을 제거했습니다. 이 속성은 내 제품 목록의 첫 번째 제품에 속합니다.

[{ 
    "attribute_name": "H\u00f8jde", 
    "properties": { 
     "359": { 
      "property_name": "125 cm" 
     }, 
     "356": { 
      "property_name": "150 cm" 
     }, 
     "357": { 
      "property_name": "180 cm" 
     }, 
     "358": { 
      "property_name": "220 cm" 
     } 
    } 
}] 

다음은 내가 원하는 것의 예입니다. 새로운 배열을 원한다. $ 변형이라고 부르기로하자.

기본 제품을 복사하고 새로운 "제품"을 만들기 위해 추가 정보를 추가해야합니다. 여전히 기본 제품이므로 ID를 변경할 수 없습니다.

이름은 "Prod_name - [{Attr_name Prop_name},]"과 같이 변경해야합니다. 예 : . 같은 :

Blommebladet TJ \ u00f8rn - H \ u00f8jde 125cm,
Blommebladet TJ \ u00f8rn - H \ u00f8jde 150cm,
Blommebladet TJ \ u00f8rn - H \ u00f8jde

당신이 무슨 뜻인지 얻을 희망 160cm와 도와주세요! 미리 감사드립니다.

+0

속성이 속한 product_id/product_name이 무엇인지 어떻게 알 수 있습니까? – Erwin

+0

제품 및 속성은 객체 배열입니다. 어떻게 가져올 지 중요하지 않습니다. 그 논리는 현장에서 처리되고 있습니다. 예를 들어 내가 가진 배열 등을 알려주는 것입니다. 중요한 점은 각 제품에는 속성이있는 자체 속성을 가질 수 있으며 제품에는 속성이 전혀없는 시간대가 있습니다. –

답변

0

반복하지 않고 x의 값 (귀하의 경우에는 속성)을 반환하는 조합 알고리즘을 찾아야합니다. 필자에게 그와 같은 것을 제공 할 수 있지만 C로 작성하면 유용하다고 생각하는 언어로 논리를 구현할 수 있습니다.

#include <stdio.h> 
#define MAXN 20 
// Finds all combinations of n from k 
const unsigned n = 5; 
const unsigned k = 3; 
unsigned mp[MAXN]; 
void print(unsigned length) 
{ 
    unsigned i; 
    for (i = 0; i < length; i++) printf("%u ", mp[i]); 
    printf("\n"); 
} 
void comb(unsigned i, unsigned after) 
{ 
    unsigned j; 
    if (i > k) return; 
    for (j = after + 1; j <= n; j++) { 
     mp[i - 1] = j; 
     if (i == k) print(i); 
     comb(i + 1, j); 
    } 
} 

int main() { 
    printf("C(%u,%u): \n", n, k); 
    comb(1, 0); 
    return 0; 
} 


    /* Results: 
    1 2 3 
    1 2 4 
    1 2 5 
    1 3 4 
    1 3 5 
    1 4 5 
    2 3 4 
    2 3 5 
    2 4 5 
    3 4 5 
*/ 
+0

잘못된 질문에 답변했습니다. : D – Erwin

+0

"그렇다면 두 배열 사이의 모든 조합을 어떻게 찾을 수 있습니까?" 알고리즘 뒤에있는 논리가 가장 적합한 방식으로 구현되면 도움이 될 것이라고 생각합니다. –