2013-05-15 39 views
8

Tôi có một mảng php đa chiều đại diện cho một bảng như thế nàyCách tốt nhất để xóa "cột" từ mảng đa chiều

------------- 
| A | 0 | A | 
|---|---|---| 
| 0 | 0 | 0 | 
|---|---|---| 
| A | 0 | A | 
------------- 

nên mảng trông như thế này:

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) 

Bây giờ tôi muốn xóa hàng thứ hai và cột thứ hai (đây chỉ là một ví dụ đơn giản btw).
Xóa hàng rất dễ dàng:

array_splice($array, 1, 1); 

I found this approach nhưng đã tự hỏi nếu có một cách đơn giản (tương tự như hàng) của xóa các cột không? Có lẽ transposing mảng đầu tiên?

+2

Nhận xét đầu tiên về câu trả lời được chấp nhận cho câu hỏi mà bạn đã đăng nói tất cả đều thực sự. – George

+0

Câu trả lời đó là 4 dòng, không thể đơn giản hơn nhiều. Nó chỉ sử dụng chức năng bạn tự cung cấp kết hợp với vòng lặp foreach ... – dtech

+1

, hãy để tôi nói lại: có cách nào hoạt động tốt hơn không? – Horen

Trả lời

11

Hãy thử điều này:

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

Thử nghiệm trên Ideone: http://ideone.com/G5zRi0

Chỉnh sửa (Amade):

delete_col chức năng cũng có thể được một chút thay đổi để làm việc với mảng với các cột mất tích:

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

Điều này có thể được sử dụng, ví dụ: khi bạn cần lặp qua một mảng và xóa một số cột trong mỗi bước. Hàm sử dụng array_splice thay vì unset sẽ không phù hợp trong các trường hợp như vậy (dựa trên bù trừ và không dựa trên khóa).

Các vấn đề liên quan