私はこのようなテーブルを表す多次元の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)
次に、2番目の行と2番目の列を削除します(これは単純化された例です)。
行の削除は簡単です。
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/G5zRi
編集(アマデ):
delete_col関数を少し変更して、列が欠落している配列を処理することもできます。
function delete_col(&$array, $key) {
return array_walk($array, function (&$v) use ($key) {
unset($v[$key]);
});
}
これは、例えば使用することができます。配列を反復処理し、各ステップでいくつかの列を削除する必要がある場合。 unsetの代わりにarray_spliceを使用する関数は、このようなシナリオでは適切ではありません。 (これはオフセットベースであり、キーベースではありません)。
PHP array_walk()
状態のマニュアル(強調を追加):
配列のvaluesのみが変更される可能性があります。その構造は変更できません、つまり、プログラマーは追加、設定解除、または並べ替えができません要素。コールバックがこの要件を尊重しない場合、この関数の動作はundefined、およびunpredictable。
それは、 mpywとAmadeの答え は機能するかもしれないが、信頼できないかのように私には聞こえます。
より安全な解決策は次のとおりです。
function delete_col(&$array, $key)
{
// Check that the column ($key) to be deleted exists in all rows before attempting delete
foreach ($array as &$row) { if (!array_key_exists($key, $row)) { return false; } }
foreach ($array as &$row) { unset($row[$key]); }
unset($row);
return true;
}