2011-04-21 57 views
0

我有此查詢如何在PHP中創建這個數組?

select * from template_product where template_id = 8 group by class_id, product_id 

從這個數據,我如何創建這樣

Array 
(
    [0] => Array 
     (
      [step_number] => 1 
      [first_class] => [54, 56, 57, 58] 
      [second_class] => [54, 56, 57, 58, 59, 60, 63, 64, 52] 
      [third_class] => [54, 52] 
     )      

    [1] => Array    
     (      
       [step_number] => 2 
       [first_class] => [61] 
       [second_class] => [62] 
       [third_class] => [61] 
     ) 
) 

基本上陣列返回

template_product_id template_step_id  step_number product_id class_id  template 
16     11      1   54   1    8 
17     11      1   56   1    8 
18     11      1   57   1    8 
19     11      1   58   1    8 
20     11      1   54   2    8 
21     11      1   56   2    8 
22     11      1   57   2    8 
23     11      1   58   2    8 
24     11      1   59   2    8 
25     11      1   60   2    8 
26     11      1   63   2    8 
27     11      1   64   2    8 
28     11      1   52   2    8 
29     11      1   54   3    8 
30     11      1   52   3    8 
31     12      2   61   1    8 
32     12      2   62   2    8 
33     12      2   61   3    8 

,每一步數是一個新的數組並且class_idfirst_class,second_class,third_class based關於它是否是1,2或3,最後各product_id是在每個數組...

任何想法如何創建這個數組

回答

1

這裏是一個解決方案:

<?php 
$records = array(
    array('step_number' => 1, 'class_id' => 1, 'product_id' => 54), 
    array('step_number' => 1, 'class_id' => 1, 'product_id' => 56), 
    array('step_number' => 1, 'class_id' => 1, 'product_id' => 57), 
    array('step_number' => 1, 'class_id' => 1, 'product_id' => 58), 
    array('step_number' => 1, 'class_id' => 2, 'product_id' => 54), 
    array('step_number' => 1, 'class_id' => 2, 'product_id' => 56), 
    array('step_number' => 1, 'class_id' => 2, 'product_id' => 57), 
    array('step_number' => 2, 'class_id' => 2, 'product_id' => 58), 
    array('step_number' => 2, 'class_id' => 2, 'product_id' => 59), 
    array('step_number' => 2, 'class_id' => 2, 'product_id' => 60), 
    array('step_number' => 2, 'class_id' => 2, 'product_id' => 63), 
    array('step_number' => 2, 'class_id' => 2, 'product_id' => 64), 
); 

$new_array = array(); 
foreach($records as $record => $row) { 
    $class = ''; 
    switch ($row['class_id']) { 
     case '1': 
      $class = 'first_class'; 
      break; 
     case '2': 
      $class = 'second_class'; 
      break; 
     case '3': 
      $class = 'third_class'; 
      break; 
    } 
    $new_array['step_number'][$row['step_number']][$class][] = $row['product_id']; 
} 

print_r($new_array); 
?> 

現在只需要更新,以便從數據庫拉。

+0

再次感謝...這個工程真棒 – Trace 2011-04-21 18:17:48

1

像這樣的東西應該工作:

$result = array(); 
$currentStepNumber = null; 

foreach ($table as $item) 
{ 
    $stepNumber = $item['step_number']; 

    if ($stepNumber != $currentStepNumber) 
    { 
     $result[] = array(
      'step_number' => $stepNumber, 
      'first_class' => array(), 
      'second_class' => array(), 
      'third_class' => array() 
     ); 

     $currentStepNumber = $stepNumber; 
    } 

    switch ($item['class_id']) 
    { 
     case 1: 
      $result[count($result) - 1]['first_class'][] = $item['product_id']; 
      break; 

     case 2: 
      $result[count($result) - 1]['second_class'][] = $item['product_id']; 
      break; 

     case 3: 
      $result[count($result) - 1]['third_class'][] = $item['product_id']; 
      break; 

     default: 

    } 
} 

var_dump($result); 

其中$table是從SQL請求您的數據。

+0

你的邏輯有風險。這是假設所有記錄按step_number順序排列,或者您將有多個具有相同step_number的數組。所以如果你得到了3條記錄,其中step_number = 1,step_number = 2的第4條記錄,step_number = 1的第5條記錄,你將有兩個數組,其中step_number = 1。 – 2011-04-21 18:12:09

+0

這個工程太棒了..再次感謝 – Trace 2011-04-21 18:18:15