问题 从多维数组中删除“列”的最佳方法


我有一个多维的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);

我发现了这种方法 但是想知道是否有更简单的方法(类似于行)删除列?也许先转换阵列?


2882
2018-05-15 12:10


起源

关于您发布的问题的接受答案的第一条评论说明了这一切。 - George
答案是4行,不能比这简单得多。它只使用你自己提供的功能结合foreach循环... - dtech
好吧,让我重新说一下:有更好的表现方式吗? - Horen
这不是重复的。这个问题是“删除”一列。另一个问题是如何返回x列。这些是不同的问题。 - John Ballinger


答案:


尝试这个:

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

这可以用于例如当你需要迭代一个数组并删除每一步中的一些列。使用的功能 array_splice 代替 未设置 在这种情况下是不合适的(它是基于偏移的而不是基于密钥的)。


15
2018-05-15 13:06