2013-03-12 5 views
0

:PHP I는 다음과 같습니다 배열이 종류의 다차원 배열

Array 
(
[13] => Array 
     (
      [name] => Blah blah 
      [description] => Blah blah blah 
      [parent_group_id] => 8 
      [display] => Blah : Blah 
      [stamps] => Array 
       (
        [73] => Array 
         (
          [stamp_id] => 73 
          [name] => Blah 
          [is_member] => 
          [rank] => 2   <-- 
          [description] => Blah blah blah 
          [rank_token] => easy 
         ) 
        [80] => Array 
         (
          [stamp_id] => 80 
          [name] => Blah 
          [is_member] => 
          [rank] => 1   <-- 
          [description] => Blah blah blah 
          [rank_token] => medium 
         ) 
        [73] => Array 
         (
          [stamp_id] => 73 
          [name] => Blah 
          [is_member] => 
          [rank] => 4   <-- 
          [description] => Blah blah blah 
          [rank_token] => easy 
         ) 

        [80] => Array 
         (
          [stamp_id] => 80 
          [name] => Blah 
          [is_member] => 
          [rank] => 3   <-- 
          [description] => Blah blah blah 
          [rank_token] => medium 
         ) 
       ) 
     ) 
) 

는 그러나, 나는 1, 2입니다 [ '순위'] 보유하고있는 번호에 의해이 배열의 개체를 정렬 할을 , 3, 4. (코드 예제에서 화살표를 추가했습니다.) 따라서 usort를 사용하면 모든 것이 숫자순으로 정렬됩니다. 그래서 나는 다음과 같이 할 것입니다 :

Array 
(
[13] => Array 
     (
      [name] => Blah blah 
      [description] => Blah blah blah 
      [parent_group_id] => 8 
      [display] => Blah : Blah 
      [stamps] => Array 
       (
        [80] => Array 
         (
          [stamp_id] => 80 
          [name] => Blah 
          [is_member] => 
          [rank] => 1   <-- 
          [description] => Blah blah blah 
          [rank_token] => medium 
         ) 
        [73] => Array 
         (
          [stamp_id] => 73 
          [name] => Blah 
          [is_member] => 
          [rank] => 2   <-- 
          [description] => Blah blah blah 
          [rank_token] => easy 
         ) 
        [80] => Array 
         (
          [stamp_id] => 80 
          [name] => Blah 
          [is_member] => 
          [rank] => 3   <-- 
          [description] => Blah blah blah 
          [rank_token] => medium 
         ) 
        [73] => Array 
         (
          [stamp_id] => 73 
          [name] => Blah 
          [is_member] => 
          [rank] => 4   <-- 
          [description] => Blah blah blah 
          [rank_token] => easy 
         ) 
       ) 
     ) 
) 

내 실제 배열이 훨씬 더 큰, 그러나 여전히이 패턴을 따른다.

+0

michi

+1

당신은'usort'를 이미 언급했습니다. 당신은 무엇을 시도 했습니까? 'foreach ($ array = $ value) $ usort ($ array [$ key] [ 'stamps'], 'yourusortfunction'); ' – Wrikken

답변

1

내가 제대로 질문을 이해 한 경우는, 작업을해야 다음 CMP 기능이 거의 설명서와 동일한 지

function cmp($a, $b) 
{ 
    if ($a['rank'] == $b['rank']) { 
     return 0; 
    } 
    return ($a['rank'] < $b['rank']) ? -1 : 1; 
} 
foreach($yourArray as &$entry) { 
    uasort($entry['stamps'], "cmp"); 
} 
unset($entry); 

print_r($yourArray); 

참고. foreach의 앰퍼샌드는 생성 된 변수가 복사본 대신 배열 멤버의 별칭임을 의미합니다 (PHP가 일반적으로하는 것처럼). $ entry라는 이름의 변수를 나중에 사용하려고하면 배열의 마지막 항목을 실제로 조작하기 때문에 unset()이 있습니다.

마음에 들지 않으면 다른 방법으로 피부를 감쌀 수 있습니다. 따라서, 예를 들어, 두 번째 함수를 만들 수 있고 원본에 array_map :이 도움이 될 것입니다 생각

function cmp($a, $b) 
{ 
    if ($a['rank'] == $b['rank']) { 
     return 0; 
    } 
    return ($a['rank'] < $b['rank']) ? -1 : 1; 
} 
function sort_entry($entry) 
{ 
    uasort($entry['stamps'], "cmp"); 
    return $entry; 
} 
array_map('sort_entry', $yourArray);  
print_r($yourArray); 
+0

매력처럼 작동했습니다. 정말 고마워요! – user2154729

+0

아무런 문제가 없음, 좋은 저녁 되십시오. – Matt