2014-10-21 2 views
0

그래, 배열에서 정보를 찾고 전달 된 자격 증명을 기반으로 블록을 반환하고 싶습니다. 내가 지금하고있는 방식이 효과가 없다. 나는 더 짧은 과정과 더 어리석은 증거 과정을 찾고있다.배열 검색 및 결과 얻기

public function get_product($product_id, $color, $size) 
{ 
    $results = $this->pf->get('products/'.$product_id); 

    $vars = $results['variants']; 

    $details = array(); 

    foreach($vars as $var) 
    { 
     if(!in_array($product_id, $details)) 
     { 
      if($var['product_id'] == $product_id) 
      { 
       if($var['size'] == $size) 
       { 
        if($var['color'] == $color) 
        { 
         $details[$var['id']] = array(
          'id' => $var['id'], 
          'name' => $var['name'], 
          'image' => $var['image'], 
          'price' => $var['price'], 
         ); 
        } 
       } 
      } 
     } 
    } 

    return $details; 
} 

이는 PRODUCT_ID, 색상 및 크기를받습니다

는 지금은이 있습니다. 경우에 따라 $color이 null이거나 때때로 $size이 null이고 때로는 $color$size이 모두 null이고 $product_id과 일치하는 배열을 하나만 찾아야합니다. 지금 아무것도 반환됩니다

$details[$var['id']] = array(
    'id' => $var['id'], 
    'name' => $var['name'], 
    'image' => $var['image'], 
    'price' => $var['price'], 
); 

:

은 내가 돌아 걸려 라하는 것은 이것이다. 예는 $results 반환이 : (.이 내가 검색해야 할 것입니다)

{ 
"code": 200, 
"result": { 
    "product": { 
     "id": 1, 
     "type": "POSTER", 
     "brand": null, 
     "model": "Poster", 
     "image": "https://d1yg28hrivmbqm.cloudfront.net/products/poster_18x24.jpg", 
     "variant_count": 9, 
     "files": [ 
      { 
       "id": "default", 
       "title": "Print file", 
       "additional_price": null 
      }, 
      { 
       "id": "preview", 
       "title": "Mockup", 
       "additional_price": null 
      } 
     ], 
     "options": [] 
    }, 
    "variants": [ 
     { 
      "id": 4464, 
      "product_id": 1, 
      "name": "Poster 12×12", 
      "size": "12×12", 
      "color": null, 
      "color_code": null, 
      "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg", 
      "price": "9.00" 
     }, 

colornull로 반환하는 방법을 알 수 있습니다. size 그렇게 할 수 있습니다. 그래서 기본적으로 지정된 product_id, 크기 및 색상에 대해 반환 된 배열을 검색하는 더 빠르고 좋은 방법을 원합니다. 그래서 이 반환되고과 일치하는 해당 변형 블록이 제출 된 변수와 일치해야합니다.

나는 내가 성취하려고하는 것을 이해했으면한다.

UPDATE는

이 내가 필요로하고 것입니다.

내 사이트에서 고객은 제품 (이 경우 포스터)을 선택합니다. 카트에 추가하기 전에 크기를 선택하라는 메시지가 표시됩니다. 12x12라고 가정 해 보겠습니다. API가 작동하는 방식은 '상단'항목이 있고 크기 및 색상이 포함 된 '변형'항목이 더 작습니다. 각 변형은 크기가 다른 포스터입니다. 포스터 제품을 얻는 유일한 방법은 포스터의 모든 변형을 수신하는 것입니다. 그러나 각각의 "변형"은 올바른 "제품"을 주문하기 위해 API에 보내는 "ID"가 다릅니다.

그래서 제품을받습니다. 변형 된 제품이므로 벌크 또는 모든 색상 및 크기로 변형됩니다.

"variants": [ 
     { 
      "id": 4464, 
      "product_id": 1, 
      "name": "Poster 12×12", 
      "size": "12×12", 
      "color": null, 
      "color_code": null, 
      "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg", 
      "price": "9.00" 
     }, 
     { 
      "id": 1349, 
      "product_id": 1, 
      "name": "Poster 12×16", 
      "size": "12×16", 
      "color": null, 
      "color_code": null, 
      "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/1349.jpg", 
      "price": "11.00" 
     }, 

그러나 고객이 12x12 크기의 포스터를 원했던 것을 기억하십니까? 12x12 포스터 인쇄 요구 만 보내면됩니다. 따라서 API에 12x12 크기와 일치하는 변형 ID를 보내야합니다.

각 변형 제품을 검색하여 포스터의 product_id 및 12x12의 크기 요구 사항과 일치하는 올바른 변형을 찾는 방법이 필요합니다.

 { 
      "id": 4464, 
      "product_id": 1, 
      "name": "Poster 12×12", 
      "size": "12×12", 
      "color": null, 
      "color_code": null, 
      "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg", 
      "price": "9.00" 
     }, 

올바른 변형을 찾으면 모든 정보를 새 배열로 수집하여 반환해야합니다.

//Get the product based on the supplied product_id. ($results) 
//Break that array down into just the variants. ($vars) 
//Search the $vars array for a block that matches the product_id. 
//Search those $vars blocks for a single one that matches the size. 
//If color is supplied, search those $vars blocks for a single one that matches the color. 

//If size and color are supplied, a single block should be returned that matches all three variables (product_id, size, and color). Sometimes size and/or color is `null`. But a product_id is always supplied. 

나는 조금 더 나아질 필요가있는 부분을 정리하기를 바랍니다.

+0

질문의 명확성. 객체를 검색하고 지정한 세부 정보가있는 배열 만 반환하겠습니까? –

+0

'product_id, size, color'에 대해 "result"-> "variant"(문제의 세 번째 코드 블록에 표시된 예제에서)를 검색하고에서 특정 정보 (문제의 두 번째 코드 블록)를 반환하고 싶습니다. 그 "블록". – user3968645

+0

개체에서 product_id, 크기 및 색을 검색하려고합니다. 한 가지는 함수가 잘못 만들어진 것입니다. 나는 일하는 것을 만들거야. 또한 json 디코드 PHP 메서드가 필요 –

답변

0

시도해보십시오. 또한 PHP를 사용하고 있다고 생각하고 있습니다.질문이 있으시면 직접 저에게 질문하십시오. 나는 너를 도울 수 있다고 생각하지만 네가 원하는 것을 정확히 모른다.

<?php 
function get_product($object){ 
    $result = json_decode($object); 

    $product_id = $result->result->product->id; 
    $variants = $result->result->variants; 

    $details = array(); 

    foreach($variants as $variant): 
     $details[] = $variant; 
    endforeach;// foreach 

    return $details; 
} 

$json_obj = '{ 
    "code": 200, 
    "result": { 
     "product": { 
      "id": 1, 
      "type": "POSTER", 
      "brand": null, 
      "model": "Poster", 
      "image": "https://d1yg28hrivmbqm.cloudfront.net/products/poster_18x24.jpg", 
      "variant_count": 9, 
      "files": [ 
       { 
        "id": "default", 
        "title": "Print file", 
        "additional_price": null 
       }, 
       { 
        "id": "preview", 
        "title": "Mockup", 
        "additional_price": null 
       } 
      ], 
      "options": [] 
     }, 
     "variants": [ 
      { 
       "id": 4464, 
       "product_id": 1, 
       "name": "Poster 12×12", 
       "size": "12×12", 
       "color": null, 
       "color_code": null, 
       "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg", 
       "price": "9.00" 
      } 
     ] 
    } 
}'; 

$array = json_decode($json_obj); 
echo '<pre>'; 
print_r(get_product($json_obj)); 
echo '</pre>'; 
+0

나는 이것이 내가 지금하고있는 일을하는 것처럼 느껴지지 않습니다. 업데이트 된 질문을 확인하십시오. – user3968645