2013-05-15 2 views
8

У меня есть многомерный массив PHP, который представляет собой таблицу, как этотЛучший способ удалить «столбец» из многомерного массива

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

поэтому массив выглядит следующим образом:

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) 

Теперь я хочу удалите вторую строку и второй столбец (это просто упрощенный пример btw).
Удаление строки легко:

array_splice($array, 1, 1); 

I found this approach но было интересно, есть ли более простой способ (по аналогии с строки) от удаления столбца, а? Может быть, сначала перенести массив?

+2

Первый комментарий к принятому отвечу на вопрос, который вы опубликовали, говорит об этом на самом деле. – George

+0

Этот ответ 4 строки, не может быть намного проще. Он использует только функцию, которую вы сами предоставили в сочетании с циклом foreach ... – dtech

+1

хорошо, позвольте мне перефразировать: есть ли лучший способ? – Horen

ответ

11

Попробуйте это:

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); 
    }); 
} 

Испытано на Ideone: http://ideone.com/G5zRi0

Edit (Амаде):

delete_col функция также может быть слегка модифицирован для работы с массивами с отсутствующими столбцами:

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

Это может быть использовано, например, когда вам нужно перебирать массив и удалять некоторые столбцы на каждом шаге. Функция, использующая array_splice вместо unset не подходит в таких сценариях (это основано на смещении, а не на основе ключа).

Смежные вопросы