2011-06-23 45 views
5

Có một số vấn đề nảy sinh với sự kết hợp đúng của đếm và tìm kiếm một mảng đa chiều.PHP - Tạo mảng đa chiều thông qua một vòng lặp dựa trên một số

Tôi hiện đang làm như sau để tạo ra một mảng kết hợp từ kết quả trả về db ​​của tôi:

$sql = "SELECT g.id, g.shortname FROM games g ORDER BY g.id ASC"; 
     $query = $this->db->query($sql); 

     if($query->num_rows() > 0): 
      foreach($query->result() as $row): 
       $data[$row->id] = $row->shortname; 
      endforeach; 
     return $data; 
     else: 
      return false; 
     endif; 

Điều này tất nhiên tạo ra các mảng sau (mà hoạt động tốt; đang bán hàng giả):

array ([1] => CoolGame, [2] => AnotherGame, [3] => BetterGame, [4] => UglyGame) 

.... và vân vân

Nhưng những gì tôi muốn làm là tự động chia tay kết quả (dựa trên một số var/giới hạn) thành các nhóm thông qua một mảng đa chiều như vậy:

array (Group 1 => 
     array([1] => CoolGame [2] => AnotherGame), 
     Group 2 => 
     array([3] => BetterGame [4] => UglyGame) 
) 

Vì vậy, trong ví dụ này, tôi $depth_count = 2;

Trong trường hợp bất cứ ai đang quan tâm, tôi đang làm điều này để làm việc với tính năng tự động tạo ra <optgroup> thẻ cho một đa chọn thông qua chức năng CI của hình thức helper của form_multiselect(). Cần trợ giúp về việc chỉnh sửa PHP của tôi để cho phép điều này. Cảm ơn!

Trả lời

7

Bạn có thể sử dụng phương thức array_chunk của php. Lưu ý việc sử dụng mã được sửa đổi bên dưới:

if($query->num_rows() > 0): 
    foreach($query->result() as $row): 
     $data[$row->id] = $row->shortname; 
    endforeach; 

    $data = array_chunk($data, 2); 

return $data; 
+0

+1, Touche. Tôi quên mất chức năng đó. Tôi thực sự thích điều đó, nếu nó là nhóm tùy ý. –

+0

+1 array_chunk (chức năng rất hữu ích khi chơi với các mảng :)) –

+0

Nội dung thú vị. Hoạt động hoàn hảo và sẽ là giải pháp hoàn chỉnh ngoại trừ thực tế là nó tạo ra các phím mảng được lập chỉ mục số. Tôi có thể có thể lặp qua mảng sau khi thực tế và thêm "Group" vào mỗi tên khóa. – k00k

1
$nGroup = 1; $curGroup = ''; 
$nRow = 0; 
foreach ($query->result() as $row){ 
    if ($nRow++ % 2 == 0){ // change 2 to your limiter 
    $curGroup = 'Group ' . $nGroup++; 
    $data[$curGroup] = array(); 
    } 
    $data[$curGroup][$row->id] = $row->shortname; 
} 

Điều gì đó tương tự? Theo dõi hàng bạn đang truy cập, nhóm hiện tại mà bạn thêm vào và tên nhóm. Sau đó, mỗi 2 (hoặc Nth) thiết lập, chuyển đổi nhóm.

Các vấn đề liên quan