我有一个多维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
编辑(阿马德):
delete_col功能也可以稍加修改与缺少的列阵列的工作:
function delete_col(&$array, $key) {
return array_walk($array, function (&$v) use ($key) {
unset($v[$key]);
});
}
这可以当你需要遍历数组,并删除在每个步骤中的一些列用于例如。 A,使用函数array_splice而不是取消设置不会在这样的情况下适当的(它的偏移量为基础的,而不是基于密钥)。
对于PHP手册array_walk()
状态(强调):
阵列的唯一值可以潜在地被改变; 其结构不能被改变 ,即,程序员不能添加,取消设置或重新排序的元素。 如果回调不尊重这个要求,这个函数的行为是不确定的 ,且不可预测 。
这听起来我好像mpyw的和阿马德的回答可能会奏效,但不能依赖。
一个更安全的解决方案可能是以下几点:
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;
}