2013-04-26 5 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" 
       ) 
      ) 
     ) 
    ) 
) 

결과는 다음 SERVICE_ID에 의해 ROLE_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

답변

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입니다! –

+0

정말 훌륭합니다. 감사합니다. – Nips

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); 
관련 문제