2013-04-26 71 views
-2

我從查詢結果:如何將結果更改爲數組?

array (
    [0]=>array (
    "id"=>"3" 
    "role_id"=> "62" 
    "user_id"=> "20" 
    "service_id"=> "1" 
    "field_id"=> "4" 
    "value"=> "asdfgh" 
) 
    [1]=>array (
    "id"=> "4" 
    "role_id"=> "62" 
    "user_id"=> "20" 
    "service_id"=> "2" 
    "field_id"=> "3" 
    "value"=> "qwerty" 
) 
    [2]=>array (
    "id"=> "5" 
    "role_id"=> "62" 
    "user_id"=> "20" 
    "service_id"=> "2" 
    "field_id"=> "4" 
    "value"=> "asdfgh" 
) 
    [3]=>array (
    "id"=> "6" 
    "role_id"=> "62" 
    "user_id"=> "20" 
    "service_id"=> "2" 
    "field_id"=> "16" 
    "value"=> "zxcvbn" 
) 
) 

我想安排這個數據是這樣的:

$roles = array(
    'services' => array(
     [2] => array(// this [2] is service_id 
      'fields'=>array(
       [0]=>array(
        "id"=>"16", "value"=>"zxcvbn" 
       ) 
       [1]=>array(
        "id"=>"4", "value"=>"asdfgh" 
       ) 
       [2]=>array(
        "id"=>"3", "value"=>"qwerty" 
       ) 
      ) 
     [1] => array(// this [1] is service_id 
      'fields'=>array(
       [0]=>array(
        "id"=>"4", "value"=>"asdfgh" 
       ) 
      ) 
     ) 
    ) 
) 

結果首先被分類,然後ROLE_ID通過的service_id。

我想顯示錶中每行是一個單獨的角色,在行中我想顯示按服務分組的字段。

怎麼辦?

我被困在這裏:

$roles = array(); 
foreach($resultArray as $ra){ 
    $roles[$ra['role_id']] = array(
     ... 
    ) 
} 

現在我想...

$temp_role = null; 
$roles = array(); 
foreach($resultArray as $ra){ 
    if($ra['role_id']!=$temp_role){ 
     $temp_role = $ra['role_id'] 
     ... something like this, but is it a good idea? 
+3

什麼是你試圖讓它進入你的預計結束數組? – Jon 2013-04-26 22:11:40

回答

4

在這裏你去;

PhpFiddle

<?php 
$initial = array (
    0=>array (
    "id"=>"3", 
    "role_id"=> "62", 
    "user_id"=> "20", 
    "service_id"=> "1", 
    "field_id"=> "4", 
    "value"=> "asdfgh" 
), 
    1=>array (
    "id"=> "4", 
    "role_id"=> "62", 
    "user_id"=> "20", 
    "service_id"=> "2", 
    "field_id"=> "3", 
    "value"=> "qwerty" 
), 
    2=>array (
    "id"=> "5", 
    "role_id"=> "62", 
    "user_id"=> "20", 
    "service_id"=> "2", 
    "field_id"=> "4", 
    "value"=> "asdfgh" 
), 
    3 =>array (
    "id"=> "6", 
    "role_id"=> "62", 
    "user_id"=> "20", 
    "service_id"=> "2", 
    "field_id"=> "16", 
    "value"=> "zxcvbn" 
) 
); 

$roles = array(
    'services' => array() 
); 

foreach($initial as $key => $value) { 
    if (!isset($roles['services'][$value['service_id']]['fields'])) { 
     $roles['services'][$value['service_id']]['fields'] = array(); 
    } 

    $roles['services'][$value['service_id']]['fields'][] = array(
     'id' => $value['field_id'], 
     'value' => $value['value'] 
    ); 
} 

echo '<pre>'; 
print_r($roles); 
echo '</pre>'; 
?> 

結果

Array 
(
    [services] => Array 
     (
      [1] => Array 
       (
        [fields] => Array 
         (
          [0] => Array 
           (
            [id] => 4 
            [value] => asdfgh 
           ) 

         ) 

       ) 

      [2] => Array 
       (
        [fields] => Array 
         (
          [0] => Array 
           (
            [id] => 3 
            [value] => qwerty 
           ) 

          [1] => Array 
           (
            [id] => 4 
            [value] => asdfgh 
           ) 

          [2] => Array 
           (
            [id] => 16 
            [value] => zxcvbn 
           ) 

         ) 

       ) 

     ) 

) 
+0

你的回答是我第一次遇到[PHPFiddle](http://phpfiddle.org)。看起來比[Codepad](http://codepad.org)和其他類似工具更有特色。這是一個upvote! – 2013-04-26 22:34:34

+0

太棒了,謝謝 – Nips 2013-04-26 22:36:36

1

phpfiddle

$services = array(); 

    foreach ($resultArray as $v) { 
     if(! isset($services[$v['service_id']])) { 
      $services[$v['service_id']] = array('fields' => array()); 
     } 
     $services[$v['service_id']]['fields'][] = array('id' => $v['field_id'], 'value' => $v['value']); 
    } 

    $roles = array('services' => $services);