2010-02-03 35 views
25

Hy vọng rằng, tôi có thể giải thích chính xác ...Nhóm một mảng đa chiều theo một giá trị cụ thể?

Tôi có một mảng đa chiều và đang cố gắng nhóm chúng theo giá trị của một khóa.

Vì vậy, tôi đang cố gắng nhóm chúng theo cấp độ, nhưng tôi sẽ không thực sự biết cấp độ trước đó. Vì vậy, nó không giống như tôi có thể đặt nó trong một vòng lặp for và nói trong khi $ i < 7, bởi vì tôi sẽ không biết rằng 7 là giá trị tối đa cho khóa cấp, và, thẳng thắn, tôi không chắc chắn đó là cách tôi sẽ cần phải làm điều đó ngay cả khi tôi đã làm ...

Array (
    [0] => Array (
      [cust] => XT8900 
      [type] => standard 
      [level] => 1 
     ) 
    [1] => Array (
      [cust] => XT8944 
      [type] => standard 
      [level] => 1 
     ) 
    [2] => Array (
      [cust] => XT8922 
      [type] => premier 
      [level] => 3 
     ) 
    [3] => Array (
      [cust] => XT8816 
      [type] => permier 
      [level] => 3 
     ) 
    [4] => Array (
      [cust] => XT7434 
      [type] => standard 
      [level] => 7 
     ) 
) 

Những gì tôi đang hy vọng sẽ tạo ra:

Array (

    [1] => Array (
      [0] => Array (
        [cust] => XT8900 
        [type] => standard 
        ) 
      [1] => Array (
        [cust] => XT8944 
        [type] => standard 
        ) 
     ) 

    [3] => Array (
      [2] => Array (
       [cust] => XT8922 
       [type] => premier 
       ) 

      [3] => Array (
       [cust] => XT8816 
       [type] => permier 
       ) 
     ) 

    [7] => Array (
      [4] => Array (
       [cust] => XT7434 
       [type] => standard 
       ) 
     ) 
) 

Trả lời

9

Bạn cần phải nhóm chúng bởi mức đầu tiên

Sử dụng foreach để lặp thành ar kiểm tra ray nếu mức là như nhau với mục trước sau đó nhóm nó với mảng

$templevel=0; 

    $newkey=0; 

    $grouparr[$templevel]=""; 

    foreach ($items as $key => $val) { 
    if ($templevel==$val['level']){ 
    $grouparr[$templevel][$newkey]=$val; 
    } else { 
    $grouparr[$val['level']][$newkey]=$val; 
    } 
    $newkey++;  
    } 
print($grouparr); 

Kết quả của in ($ grouparr); sẽ hiển thị như định dạng mà bạn hy vọng cho

Bạn cũng có thể thử

print($grouparr[7]); 

Sẽ hiển thị

[7] => Array (
     [4] => Array (
      [cust] => XT7434 
      [type] => standard 
      ) 
    ) 

Hoặc

print($grouparr[3]); 

Sẽ hiển thị

[3] => Array (
     [2] => Array (
      [cust] => XT8922 
      [type] => premier 
      ) 

     [3] => Array (
      [cust] => XT8816 
      [type] => permier 
      ) 
    ) 
34

Cách tốt nhất, nếu bạn có quyền kiểm soát việc xây dựng mảng ban đầu, chỉ cần thiết lập mọi thứ giống như lúc bắt đầu khi bạn thêm mục nhập.

Nếu không sau đó xây dựng một mảng tạm thời để sắp xếp:

foreach ($input_arr as $key => &$entry) { 
    $level_arr[$entry['level']][$key] = $entry; 
} 

Lá cho bạn những mẫu bạn muốn và tất cả mọi thứ tham chiếu với nhau.

Tạo mảng giống như vậy ngay từ đầu mặc dù nếu có thể.

5

Dưới đây là giải pháp tôi đã đổ bộ lên cho một vấn đề giống hệt nhau, được bao bọc như một chức năng:

function arraySort($input,$sortkey){ 
    foreach ($input as $key=>$val) $output[$val[$sortkey]][]=$val; 
    return $output; 
} 

Để sắp xếp $ myarray kết thúc bằng phím có tên là "mức độ" chỉ làm điều này:

$myArray = arraySort($myArray,'level'); 

Hoặc nếu bạn không muốn nó làm chức năng, chỉ cần sử dụng một lần, điều này sẽ tạo $ myNewArray từ $ myArray được nhóm theo khóa 'cấp'

foreach ($myArray as $key=>$val) $myNewArray[$val['level']][]=$val; 
+0

đây là một câu trả lời hữu ích như vậy. Tôi đang cố gắng sử dụng điều này nhưng để có $ val là một giá trị duy nhất. Gợi ý? –

6
function group_assoc($array, $key) { 
    $return = array(); 
    foreach($array as $v) { 
     $return[$v[$key]][] = $v; 
    } 
    return $return; 
} 

//Group the requests by their account_id 
$account_requests = group_assoc($requests, 'account_id'); 
2
$result = array(); 
    foreach ($yourArrayList as $data) { 
     $id = $data['level']; 
     if (isset($result[$id])) { 
      $result[$id][] = $data; 
     } else { 
      $result[$id] = array($data); 
     } 
    } 
0
function _group_by($array,$key,$keyName) 
    { 
      $return = array(); 

      foreach($array as $val) { 
       $return[$keyName.$val[$key]][] = $val; 
      } 
     return $return; 

    } //end of function 
Các vấn đề liên quan