18

このようなテーブルを表す多次元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);

私はこのアプローチを見つけましたが、列を削除するより簡単な方法 (行に似ている) があるかどうか疑問に思っていましたか? 多分最初に配列を転置しますか?

4

4 に答える 4

23

これを試して:

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

編集(アマデ):

delete_col関数は、列が欠落している配列で動作するように少し変更することもできます。

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

これは、配列を繰り返し処理し、各ステップでいくつかの列を削除する必要がある場合などに使用できます。unsetの代わりにarray_spliceを使用する関数は、このようなシナリオでは適切ではありません (キーベースではなくオフセットベースです)。

于 2013-05-15T13:06:11.743 に答える