У меня есть многомерный 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);
Я нашел этот подход, но задавался вопросом, был ли более простой способ (аналогично строке) удаления столбца? Может быть, сначала перенести массив?
Попробуй это:
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
Изменить (Amade):
Функция delete_col также может быть слегка изменена для работы с массивами с отсутствующими столбцами:
function delete_col(&$array, $key) { return array_walk($array, function (&$v) use ($key) { unset($v[$key]); }); }
сfunction delete_col(&$array, $key) { return array_walk($array, function (&$v) use ($key) { unset($v[$key]); }); }
Это можно использовать, например, когда вам нужно перебирать массив и удалять некоторые столбцы на каждом шаге. Функция, использующая array_splice вместо unset , не была бы подходящей в таких сценариях (она основана на смещении, а не на основе ключа).