2011-11-02 43 views
18

Làm thế nào để bạn cắt bớt một mảng PHP một cách hiệu quả nhất?PHP cách cắt ngắn một mảng

Tôi có nên sử dụng array_splice không?

+0

Bạn muốn đạt được điều gì? Cung cấp một số ví dụ. – hsz

+6

Tại sao sự ác cảm đối với 'mảng_splice'? – Clive

+0

Tôi đọc kết quả tham gia SQL và cần đặt lại một mảng kết hợp mỗi lần lặp thứ 3. Tôi nghĩ số có thể được sử dụng ở đây, giống như trong một số ngôn ngữ mà bạn đặt chiều dài mảng thành 0 ... –

Trả lời

18

Bạn có thể sử dụng các chức năng có nguồn gốc từ loại bỏ các phần tử mảng:

  • array_pop - Pop phần tử ra khỏi cuối của mảng
  • array_shift - phím Shift một yếu tố ra khỏi đầu của mảng
  • array_slice - Extract một lát của mảng
  • unset - Xóa một phần tử khỏi mảng

Với kiến ​​thức này thực hiện chức năng của riêng bạn

function array_truncate(array $array, $left, $right) { 
    $array = array_slice($array, $left, count($array) - $left); 
    $array = array_slice($array, 0, count($array) - $right); 
    return $array; 
} 

Demo - http://codepad.viper-7.com/JVAs0a

+0

Peter bạn có thể giải thích các tham số '$ left' và' $ right' cho các thông số –

+1

@RahilWazir cắt x '$ left' từ trái, cắt x' $ right' từ bên phải – Peter

4

Có, trừ khi bạn muốn lặp qua mảng và unset() các yếu tố không mong muốn.

+1

... và cập nhật các phím mảng nếu chúng là số. – FMaz008

+0

Lưu ý, trong một foreach bạn sẽ phải sử dụng tham chiếu chỉ mục mảng đầy đủ vì foreach sử dụng một bản sao của mảng. 'foreach ($ array là $ key => $ value) {unset ($ array [$ key]}' không 'foreach ($ array là $ key => $ value) {unset ($ value)}'. –

0

Bạn có thể sử dụng một trong các chức năng này:

function array_truncate(&$arr) 
{ 
    while(count($arr) > 0) array_pop($arr); 
} 
// OR (faster) 
function array_truncate2(&$arr) 
{ 
    array_splice($arr, 0, count($arr)); 
} 

Cách sử dụng:

$data2 = array("John" => "Doe", "Alice" => "Bob"); 
array_truncate($data2); 
// OR 
array_truncate2($data2); 
+0

'while'- vòng lặp có lẽ sẽ là cách không hiệu quả nhất để cắt ngắn một mảng :-) –

+0

@AlexanderFarber tất nhiên nó là, đó là lý do tại sao tôi nói (trong nhận xét) rằng khác là nhanh hơn. Tôi đưa vào phương thức array_pop để hiển thị một phương thức mà bạn có tùy chọn để làm điều gì đó với phần tử trước khi loại bỏ nó. –

2

này functi trên nên hoạt động

function truncateArray($truncateAt, $arr) { 
    array_splice($arr, $truncateAt, (count($arr) - $truncateAt)); 
    return $arr; 
} 
Các vấn đề liên quan