2013-05-15 11 views
8

Mam wielowymiarowej tablicy PHP, który reprezentuje tabelę jak taNajlepszy sposób usunąć „kolumny” z tablicy wielowymiarowej

------------- 
| A | 0 | A | 
|---|---|---| 
| 0 | 0 | 0 | 
|---|---|---| 
| A | 0 | A | 
------------- 

więc tablica wygląda następująco:

array (size=3) 
    0 => 
    array (size=3) 
     0 => string 'A' (length=1) 
     1 => string '0' (length=1) 
     2 => string 'A' (length=1) 
    1 => 
    array (size=3) 
     0 => string '0' (length=1) 
     1 => string '0' (length=1) 
     2 => string '0' (length=1) 
    2 => 
    array (size=3) 
     0 => string 'A' (length=1) 
     1 => string '0' (length=1) 
     2 => string 'A' (length=1) 

Teraz chcę usuń drugi wiersz i drugą kolumnę (jest to tylko uproszczony przykład btw).
Usuwanie rzędzie jest łatwe:

array_splice($array, 1, 1); 

I found this approach ale zastanawiać, czy istnieje prostszy sposób (podobnie do wiersza) delecji kolumny, jak również? Może najpierw transponować tablicę?

+2

Pierwszy komentarz na temat zaakceptowanej odpowiedzi na pytanie, które wysłałeś, mówi wszystko naprawdę. – George

+0

Ta odpowiedź to 4 linie, nie można uzyskać o wiele prostsze. Używa tylko funkcji, którą sam dostarczyłeś w połączeniu z pętlą foreach ... – dtech

+1

cóż, pozwól mi zmienić: czy jest lepszy sposób? – Horen

Odpowiedz

11

Spróbuj tego:

function delete_row(&$array, $offset) { 
    return array_splice($array, $offset, 1); 
} 

function delete_col(&$array, $offset) { 
    return array_walk($array, function (&$v) use ($offset) { 
     array_splice($v, $offset, 1); 
    }); 
} 

testowany na Ideone: http://ideone.com/G5zRi0

Edit (Amade):

delete_col Funkcja ta może być również nieznacznie zmodyfikowany do pracy z tablicami z brakujących kolumnach:

function delete_col(&$array, $key) { 
    return array_walk($array, function (&$v) use ($key) { 
     unset($v[$key]); 
    }); 
} 

Można tego użyć np. kiedy trzeba powtórzyć tablicę i usunąć kilka kolumn w każdym kroku. Funkcja korzystająca z array_splice zamiast zdemontować nie byłaby odpowiednia w takich scenariuszach (jest oparta na przesunięciu, a nie na kluczach).