2014-01-31 3 views
1

다른 배열을 기반으로 정의 된 배열을 어떻게 정렬 할 수 있습니까? 우리 CMS에는 jQuery 정렬 가능 위젯을 사용하여 양식의 행을 정렬하는 양식이 있습니다. 양식 행은 처음에 다차원 배열로 작성됩니다. 저장시 데이터는 직렬화 된 배열에 저장됩니다. 따라서 행을 정렬하고 저장하면 데이터가 "정렬 된"순서로 저장됩니다. 우리가 치고있는 문제는 양식이 저장된 정렬 된 배열이 아니라 원래 배열의 순서대로 출력된다는 것입니다.PHP가 다차원 배열을 다른 배열로 정렬

저장되고 정렬 된 배열 순서로 원래 배열을 정렬 할 수 있습니까? 그래서 배열에서, 필드의 행이 그룹 ID의가 여기에 정렬 된 저장 데이터

Array 
(
    [group-3] => Array 
     (
      [city] => Apples 
      [zip] => 12345 
     ) 

    [group-1] => Array 
     (
      [name] => Tigre Woodrow 
      [email-address] => [email protected] 
     ) 

    [group-2] => Array 
     (
      [address] => 1234 Anywhere Street 
     ) 

) 

Array 
(
    [group-1] => Array 
     (
      [fields] => Array 
       (
        [name] => Array 
         (
          [type] => text 
          [name] => Full Name 
         ) 

        [email-address] => Array 
         (
          [type] => text 
          [name] => Email Address 
         ) 

       ) 
     ) 

    [group-2] => Array 
     (
      [fields] => Array 
       (
        [address] => Array 
         (
          [type] => text 
          [name] => Address 
         ) 

       ) 
     ) 

    [group-3] => Array 
     (
      [fields] => Array 
       (
        [city] => Array 
         (
          [type] => text 
          [name] => City 
         ) 

        [zip] => Array 
         (
          [type] => text 
          [name] => Zip 
         ) 

       ) 
     ) 

) 

을 그리고 다음은

은 원래의 배열 순서가 보이는 방법입니다. 해당 그룹 ID를 기준으로 정렬 할 수 있습니까?

+1

사용 ['usort' (http://php.net/usort). – mc10

+0

나는 usort로 놀아 보았지만 실제로는 두 개의 다차원 배열로 어떻게 작동하는지 모른다. –

답변

1

아래의 댓글 in the usort documentation은 도움이 될만한 소리입니다. 나는 당신의 문제에 대해 구체적으로 코드를 업데이트하려고 노력할 것이지만 그것은 올바른 방향으로 나아갈 것이다.

우선 순위 목록으로 작동하는 다른 배열에 따라 배열을 정렬하려면이 기능을 사용할 수 있습니다.

<?php 
function listcmp($a, $b) 
{ 
    global $order; 

    foreach($order as $key => $value) 
    { 
     if($a==$value) 
     { 
      return 0; 
      break; 
     } 

     if($b==$value) 
     { 
      return 1; 
      break; 
     } 
    } 
} 

$order[0] = "first"; 
$order[1] = "second"; 
$order[2] = "third"; 

$array[0] = "second"; 
$array[1] = "first"; 
$array[2] = "third"; 
$array[3] = "fourth"; 
$array[4] = "second"; 
$array[5] = "first"; 
$array[6] = "second"; 

usort($array, "listcmp"); 

print_r($array); 
?> 
관련 문제