2013-02-21 2 views
8

비슷한 질문 및 답변이 게시되었지만 그 중 아무 것도 내 배열 구조와 일치하지 않으므로 놓친 경우 사과드립니다.다차원 배열을 하위 배열 키 값순으로 정렬

Array ( 
[0] => Array ([meta_id] => 37850 [post_id] => 5548 [meta_key] => Item # [meta_value] => 66002) 
[1] => Array ([meta_id] => 37851 [post_id] => 5548 [meta_key] => Hex Size [meta_value] => .051") 
[2] => Array ([meta_id] => 37852 [post_id] => 5548 [meta_key] => Across Flats [meta_value] => 0.051) 
[3] => Array ([meta_id] => 37853 [post_id] => 5548 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37854 [post_id] => 5548 [meta_key] => Shank [meta_value] => .315")) 

Array ( 
[0] => Array ([meta_id] => 37910 [post_id] => 5553 [meta_key] => Item # [meta_value] => 66008) 
[1] => Array ([meta_id] => 37911 [post_id] => 5553 [meta_key] => Hex Size [meta_value] => 1/8") 
[2] => Array ([meta_id] => 37912 [post_id] => 5553 [meta_key] => Across Flats [meta_value] => 0.127) 
[3] => Array ([meta_id] => 37913 [post_id] => 5553 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37914 [post_id] => 5553 [meta_key] => Shank [meta_value] => .315")) 

Array ( 
[0] => Array ([meta_id] => 37862 [post_id] => 5549 [meta_key] => Item # [meta_value] => 66004) 
[1] => Array ([meta_id] => 37863 [post_id] => 5549 [meta_key] => Hex Size [meta_value] => 1/16") 
[2] => Array ([meta_id] => 37864 [post_id] => 5549 [meta_key] => Across Flats [meta_value] => 0.063) 
[3] => Array ([meta_id] => 37865 [post_id] => 5549 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37866 [post_id] => 5549 [meta_key] => Shank [meta_value] => .315")) 

Array ( 
[0] => Array ([meta_id] => 37886 [post_id] => 5551 [meta_key] => Item # [meta_value] => 66006) 
[1] => Array ([meta_id] => 37887 [post_id] => 5551 [meta_key] => Hex Size [meta_value] => 3/32") 
[2] => Array ([meta_id] => 37888 [post_id] => 5551 [meta_key] => Across Flats [meta_value] => 0.095) 
[3] => Array ([meta_id] => 37889 [post_id] => 5551 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37890 [post_id] => 5551 [meta_key] => Shank [meta_value] => .315")) 

내가 [meta_value] 배열의 순서를 나열해야합니다 이것은 워드 프레스 wpdb 클래스에 의해 생성 된 배열입니다. 그런 다음 배열을 사용하여 순서대로 제품 표를 생성합니다. 나는 다음과 같은 기능과 함께 일하고있다, 그러나 그것은 어떤 의미하지 않는 결과를 생성합니다

function subval_sort($a,$subkey) { 
    foreach($a as $k=>$v) { 
     $b[$k] = strtolower($v[$subkey]); 
    } 
    asort($b); 
    foreach($b as $key=>$val) { 
     $c[] = $a[$key]; 
    } 
    return $c; 
} 
+0

쿼리 자체에서이 작업을 수행하는 방법이있을 수 있습니다 ...이 정보를 어떻게 생성하는지 게시하십시오. – jondavidjohn

+0

정렬 전에 이러한 모든 배열을 병합 하시겠습니까, 아니면 정렬 만 하시겠습니까? 그들 "그들의 서브 어레이 안에"? – Passerby

답변

20

사용 usort() 예 :

$items = [ 
    ['id' => 3, 'item' => 'pc'], 
    ['id' => 1, 'item' => 'mouse'], 
    ['id' => 2, 'item' => 'kb'], 
]; 

function compare_id($a, $b) { 
    if ($a['id'] == $b['id']) return 0; 
    return ($a['id'] < $b['id']) ? -1 : 1; 
} 

usort($items, 'compare_id'); 

var_dump($items);  

또는 사용하여 익명 함수를

usort($items, function ($a, $b) { 
    if ($a['id'] == $b['id']) return 0; 
    return ($a['id'] < $b['id']) ? -1 : 1; 
}); 
+0

이것은 허용 된 대답이어야합니다. 눈 깜박 할 사이에 작동했습니다! – Laci