2011-06-23 150 views
5

在計算多維數組的count和foreach時遇到了一些麻煩。PHP - 通過基於計數的循環創建多維陣列

我目前在做以下從我的分貝的返回結果中創建一個關聯數組:

$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; 

當然,這將產生以下陣列(工作正常;半人造碼):

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

....等等

但我想通過做一個多維數組,像這樣將自動向上突破的結果(基於計數VAR /限制器)成組內容:

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

因此,在這個例子中,我$depth_count = 2;

如果有人有興趣,我這樣做是系統自動產生的<optgroup>標籤多工作通過CI的表單輔助函數的form_multiselect()函數中進行選擇。 需要一些幫助,以調整我的PHP,以允許這一點。謝謝!

回答

7

您可以使用php的array_chunk方法。請注意它在以下經過修改的代碼中的使用:

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。我忘了那個功能。我其實很喜歡,如果是任意分組。 –

+0

+1 array_chunk(非常有用的功能,而陣列:) :) –

+0

很酷的東西。完美的作品將是完整的解決方案,除了它創建數字索引數組鍵。我可以在事實之後迭代數組,並將「組」添加到每個鍵名稱。 – 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; 
} 

這樣的事情?跟蹤您所在的行,您添加的當前羣組以及羣組名稱。然後,每隔2(或N次)設置,切換組。