2016-06-01 5 views
2

I 다음 어레이 가지고PHP 연관 배열을 반복

array(5) { 
    [83]=> 
    object(stdClass)#39 (17) { 
    ["id"]=> 
    int(83) 
    ["product_id"]=> 
    int(15) 
    ["area_id"]=> 
    int(2) 
    ["termtype_id"]=> 
    int(40) 
    ["name"]=> 
    string(23) "XXXXXX" 
    } 
[89]=> 
    object(stdClass)#398 (17) { 
    ["id"]=> 
    int(89) 
    ["product_id"]=> 
    int(15) 
    ["area_id"]=> 
    int(2) 
    ["termtype_id"]=> 
    int(40) 
    ["name"]=> 
    string(23) "YYYYY" 
    } 
[102]=> 
    object(stdClass)#394 (17) { 
    ["id"]=> 
    int(102) 
    ["product_id"]=> 
    int(23) 
    ["area_id"]=> 
    int(2) 
    ["termtype_id"]=> 
    int(40) 
    ["name"]=> 
    string(23) "ZZZZZ" 
    } 
[104]=> 
    object(stdClass)#397 (17) { 
    ["id"]=> 
    int(104) 
    ["product_id"]=> 
    int(23) 
    ["area_id"]=> 
    int(2) 
    ["termtype_id"]=> 
    int(40) 
    ["name"]=> 
    string(23) "AAAAA" 
    } 
[107]=> 
    object(stdClass)#399 (17) { 
    ["id"]=> 
    int(107) 
    ["product_id"]=> 
    int(23) 
    ["area_id"]=> 
    int(2) 
    ["termtype_id"]=> 
    int(40) 
    ["name"]=> 
    string(23) "KKKK" 
    } 
} 

상기 어레이는 SQL 쿼리로부터 생성되고, 다음 함수를 사용 반복은 :

public function keyArray($arr) { 
     $result = []; 
     foreach($arr as $element) { 
      $result[$element->id] = $element; 
     } 
     return $result; 
    } 

어쨌든 I는 반복 할 수 있는가를 위의 ARRAY 및 product_id와 관련된 모든 데이터를 얻으시겠습니까?

array(2){ 
[83]=> 
    object(stdClass)#39 (17) { 
    ["id"]=> 
    int(83) 
    ["product_id"]=> 
    int(15) 
    ["area_id"]=> 
    int(2) 
    ["termtype_id"]=> 
    int(40) 
    ["name"]=> 
    string(23) "XXXXXX" 
    } 
[89]=> 
    object(stdClass)#398 (17) { 
    ["id"]=> 
    int(89) 
    ["product_id"]=> 
    int(15) 
    ["area_id"]=> 
    int(2) 
    ["termtype_id"]=> 
    int(40) 
    ["name"]=> 
    string(23) "YYYYY" 
    } 
} 

어떤 도움

가 극명하게 될 것이다 :

결과 일 것이다 다음? 또한

public function keyArray($arr, $searchProductId) { 
     $result = []; 
     foreach($arr as $element) { 
      if($element->product_id == $searchProductId){ 
       $result[$element->id] = $element; 
      } 
     } 
     return $result; 
    } 

가능한 경우, database 수준의 결과를 필터링하는 그것의 더 나은 :

+0

당신은 ID에 대한 중복 키 ... 논리가에 무엇인가가 ... 바깥 배열의 키는 PRODUCT_ID를 나타낸다는 것을 주목하고, 중첩 된 배열은 같은 PRODUCT_ID이있는 항목입니까? 이전 버전을 덮어 쓸 필요가 있습니까? 아니면 그냥 무시하니? – Naruto

+0

당신은 다음과 같이 쓰고 있습니다 : 나는 그것을 바꿨다 –

+0

'array_map (function ($ ar) {if ($ ar-> product_id == $ productID) {return $ ar;}}, $ array); 당신을 위해 .. –

답변

0

이 같은 함수 변환은 $searchProductId 검색에 대한 PRODUCT_ID PRODUCT_ID 관련된 모든 데이터입니다. 필수 product_id에 대한 데이터베이스 쿼리에 조건을 추가하기 만하면됩니다. 당신은 array_filter 기능을 사용할 수 있습니다

public function getProductArrays($arr,$iProductID) { 
    $arrResult = array(); 
    foreach($arr as $id => $class) { 
     if ($iProductID == $class->product_id) 
      $arrResult[$id] = $class; 
    } 
    return $arrResult; 
} 
+0

그 덕분에 –

-1

은 ... :

public function keyArray(array $data, $productId) { 
    return array_filter($data, function($element) use($productId) { 
     return $element->product_id == $product_id; 
    }) 
} 

이 동일한 product_id 값을 검색에만 객체와 배열을 반환합니다.

+0

나는 이미 내 코드와 코드의 차이점은 무엇입니까 대답을 주었다 ?? –

+0

거기에 꾸준히 ... 너무 공격적이지 마라! 내 글을 쓰고 쓸 때 나는 너의 것을 보지 못했다 – Barry

+0

오크, 나는 공격적이지 않다, 그냥 묻는다 :) –

2

나는이 일을 할 생각

0

배열을 다차원 배열로 정렬하고 product_ids를 사용하여 그룹화 할 수 있습니다. 다음은 여기에있는 의미의 예입니다.

  <?php 
       //FIRST WE SIMULATE SOMETHING SIMILAR TO YOUR DB DATA TO WORK WITH  
       $objData1 = new stdclass(); 
       $objData2 = new stdclass(); 
       $objData3 = new stdclass(); 
       $objData4 = new stdclass(); 
       $objData5 = new stdclass(); 

       $objData1->id   = 83; 
       $objData1->product_id = 15; 
       $objData1->area_id  = 2; 
       $objData1->termtype_id = 40; 
       $objData1->name   = "XXXXXX"; 


       $objData2->id   = 83; 
       $objData2->product_id = 15; 
       $objData2->area_id  = 2; 
       $objData2->termtype_id = 40; 
       $objData2->name   = "YYYYYY"; 


       $objData3->id   = 83; 
       $objData3->product_id = 23; 
       $objData3->area_id  = 2; 
       $objData3->termtype_id = 40; 
       $objData3->name   = "ZZZZZZ"; 


       $objData4->id   = 83; 
       $objData4->product_id = 23; 
       $objData4->area_id  = 2; 
       $objData4->termtype_id = 40; 
       $objData4->name   = "AAAAAA"; 

       $objData5->id   = 83; 
       $objData5->product_id = 23; 
       $objData5->area_id  = 2; 
       $objData5->termtype_id = 40; 
       $objData5->name   = "KKKK"; 

       $arrDBData = array(
        83 => $objData1, 
        89 => $objData2, 
        102 => $objData3, 
        104 => $objData4, 
        107 => $objData5, 
       ); 


       // NEXT WE ROLL-OUT A FUNCTION TO GROUP THE DATA USING PRODUCT IDS: 

       function groupAllDataByProductID($arrOfObjects){ 
        $arrResults     = array(); 
        $PID      = null; 
        foreach($arrOfObjects as $intKey=>$objData){ 
         if(!array_key_exists($objData->product_id, $arrResults)){ 
          $PID    = $objData->product_id; 
          $arrResults[$PID] = array(); 
          $arrResults[$PID][] = $objData; 
         }else{ 
          $PID    = $objData->product_id; 
          $arrResults[$PID][] = $objData; 
         } 
        } 
        return $arrResults; 
       } 

       // FINALLY WE TEST THE RESULT WITH PHP'S VAR_DUMP    
       var_dump(groupAllDataByProductID($arrDBData)); 

그리고 이것은 var_dump()의 결과입니다.

   array (size=2) 
        15 => 
        array (size=2) 
         0 => 
         object(stdClass)[1] 
          public 'id' => int 83 
          public 'product_id' => int 15 
          public 'area_id' => int 2 
          public 'termtype_id' => int 40 
          public 'name' => string 'XXXXXX' (length=6) 
         1 => 
         object(stdClass)[2] 
          public 'id' => int 83 
          public 'product_id' => int 15 
          public 'area_id' => int 2 
          public 'termtype_id' => int 40 
          public 'name' => string 'YYYYYY' (length=6) 
        23 => 
        array (size=3) 
         0 => 
         object(stdClass)[3] 
          public 'id' => int 83 
          public 'product_id' => int 23 
          public 'area_id' => int 2 
          public 'termtype_id' => int 40 
          public 'name' => string 'ZZZZZZ' (length=6) 
         1 => 
         object(stdClass)[4] 
          public 'id' => int 83 
          public 'product_id' => int 23 
          public 'area_id' => int 2 
          public 'termtype_id' => int 40 
          public 'name' => string 'AAAAAA' (length=6) 
         2 => 
         object(stdClass)[5] 
          public 'id' => int 83 
          public 'product_id' => int 23 
          public 'area_id' => int 2 
          public 'termtype_id' => int 40 
          public 'name' => string 'KKKK' (length=4) 
관련 문제