2011-06-23 25 views
5

Po pewnym problemie wymyślono odpowiednią kombinację count i foreach dla tablicy wielowymiarowej.PHP - Utwórz tablicę wielowymiarową za pomocą pętli opartej na liczbie:

Jestem obecnie w następujący sposób, aby utworzyć tablicę asocjacyjną z mojego DB zwróconego wyniku:

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

To oczywiście powoduje następujące array (który działa dobrze; kod semi-pseudo):

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

.... i tak dalej

ale to, co chcesz zrobić, to automatycznie zerwać wyniki (na podstawie zliczania var/limiter) do grup poprzez tablicy wielowymiarowej tak:

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

Więc w tym przykładzie, mój $depth_count = 2;

W przypadku gdy ktoś jest zainteresowany, robię to do pracy z generowanych automatycznie <optgroup> tagów multi wybrać poprzez form_multiselect funkcji CI Kształt Pomocników(). Potrzebujesz pomocy przy ulepszaniu mojego PHP, aby to umożliwić. Dzięki!

Odpowiedz

7

Możesz użyć metody php: array_chunk. Zwróć uwagę na jego użycie w zmodyfikowanym kodzie poniżej:

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. Zapomniałem o tej funkcji. Właściwie to lubię, jeśli jest to arbitralne grupowanie. –

+0

+1 array_chunk (bardzo przydatna funkcja podczas gry z tablicami :)) –

+0

Fajne rzeczy. Działa doskonale i stanowiłoby kompletne rozwiązanie, oprócz tego, że tworzy numerycznie indeksowane klucze tablicowe. Prawdopodobnie mogę powtórzyć całą tablicę po fakcie i dodać "Grupę" do każdej nazwy klucza. – 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; 
} 

Coś takiego? Śledź wiersz, w którym się znajdujesz, bieżącą grupę, do której dodajesz, i nazwę grupy. Następnie co drugi zestaw (lub N-ty) przełącz grupy.

Powiązane problemy