2014-02-22 2 views
1

'variant_name'키를 사용하여 이런 종류의 배열을 어떻게 정렬 할 수 있는지 조언을 찾고 있습니다.PHP 메가 배열을 값순으로 정렬

배열이 정말 거대하기 때문에 나는 결과를보고있는 상태로 축소했습니다.

... 
    $filter[2413][1][81][sub_id] = 1; 
    $filter[2413][1][81][variant_id] = 81; 
    $filter[2413][1][81][variant_name] = 'Banana'; 

    $filter[2413][2][87][sub_id] = 2; 
    $filter[2413][2][87][variant_id] = 87; 
    $filter[2413][2][87][variant_name] = 'Apple'; 

    $filter[2413][3][32][sub_id] = 3; 
    $filter[2413][3][32][variant_id] = 32; 
    $filter[2413][3][32][variant_name] = 'Carrot'; 
    ... 

$filter[x][x][x]은 순차적이지 않습니다.

은 내가 이전에 사용 정렬 기능을 시도했지만 그것은 배열의 종류와 작동하지 않습니다

function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) { 
    $sort_col = array(); 
    foreach ($arr as $key=> $row) { 
     $sort_col[$key] = $row[$col]; 
    } 
    array_multisort($sort_col, $dir, $arr); 
} 
array_sort_by_column($filter[][][], 'variant_name'); 

내 목표는 '애플', '바나나'에 'VARIANT_NAME'를 정렬하여 배열을 수정할 수 있습니다 , '캐롯'배열 구조를 유지합니다.

+0

에 usort()가 갈 수있는 방법입니다. – goat

답변

1

주어진 예제에서 테스트 한 작동 코드입니다.

내 코드는 여전히 최적화 될 수 있습니다. 단지 내 충고로 받아 들여야합니다.

TL; DR = usort()을 사용하십시오.

function mySort($a,$b) 
{ 
    $av = ""; 
    $bv = ""; 

    foreach($a as $ak) 
     $av = $ak['variant_name']; 

    foreach($b as $bk) 
     $bv = $bk['variant_name']; 

    if($av[0] < $bv[0]) 
     return false; 
    else return true; 
} 

사용 방법은? 정렬 할 첫 x 째 레벨 h 열을 지정해야합니다.

usort($filter['2413'],"mySort"); 

그럼 내가 가진 결과는 다음과 같습니다

Array 
(
    [2413] => Array 
    (
     [0] => Array 
     (
      [87] => Array 
      (
       [sub_id] => 2 
       [variant_id] => 87 
       [variant_name] => Apple 
      ) 
     ) 

     [1] => Array 
     (
      [81] => Array 
      (
       [sub_id] => 1 
       [variant_id] => 81 
       [variant_name] => Banana 
      ) 
     ) 

     [2] => Array 
     (
      [32] => Array 
      (
       [sub_id] => 3 
       [variant_id] => 32 
       [variant_name] => Carrot 
      ) 
     ) 
    ) 
) 
+0

Craftein, [sub_id]의 값이 원래 $ filter [filter_id] [sub_id] (초) 키와 일치하지 않습니다. –

+0

어디서 문제가 해결 될 수 있습니까? –

+0

나는 그것이 가능하다고 생각하지 않는다. 정렬을 통해 주문을 변경하면 필연적으로 키가 변경됩니다. – Craftein

관련 문제