2011-06-29 45 views
5

Làm thế nào tôi nên loại bỏ mọi yếu tố thứ hai từ một mảng như thế này (sử dụng không có gì nhưng được xây dựng trong các chức năng Array trong PHP):Xóa mọi phần tử thứ hai khỏi mảng và sắp xếp lại các phím?

$array = array('first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh'); 

Và khi tôi loại bỏ mọi yếu tố thứ hai, tôi sẽ nhận được:

$array = array('first', 'third', 'fifth', 'seventh'); 

Có thể?

Trả lời

13
$array = array('first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh'); 
foreach (range(1, count($array), 2) as $key) { 
    unset($array[$key]); 
} 
$array = array_merge($array); 
var_dump($array); 

hoặc

$array = array('first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh'); 
$size = count($array); 
$result = array(); 
for ($i = 0; $i < $size; $i += 2) { 
    $result[] = $array[$i]; 
} 
var_dump($result); 
+1

bạn là người giỏi nhất! Tôi sẽ chấp nhận câu trả lời của bạn trong khoảng 8-10 phút;) – metaforce

1

Vâng, tất nhiên.

for ($i = 0; $i < count($array); $i++) 
{ 
    if (($i % 2) == 0) unset ($array[$i]); 
} 
+0

dobar dobar;) hvala ti! – metaforce

+1

Điều này sẽ không sắp xếp lại các phím và (theo câu hỏi) điều này sẽ loại bỏ 0,2,4, ..., nhưng chúng cần được giữ lại. 1,3,5, ... nên được loại bỏ. Một "điều" nhỏ: Bạn không nên sử dụng các hàm trong biểu thức 'for'-test, bởi vì nó được gọi trong bất kỳ lần lặp nào. Bổ sung nó sẽ dẫn đến hành vi không mong muốn, bởi vì kích thước của mảng thay đổi (sau khi 'unset()' đầu tiên kích thước không phải là '$ maxKey + 1' nữa). – KingCrunch

+0

@KingCrunch Tôi vừa cho anh ta một ví dụ. Ngoài ra, tôi đồng ý với việc sử dụng các hàm trong biểu thức thử nghiệm. Nhưng một lần nữa, đây chỉ là một ví dụ của trường như thế nào ông nên suy nghĩ để giải quyết vấn đề của mình. –

3

cách tiếp cận khác sử dụng array_intersect_key:

$array = array('first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh'); 
$keys = range(0, count($array), 2); 
$result = array_values(array_intersect_key($array, array_combine($keys, $keys))); 
var_dump($result); 
0

Cách đúng là một reverse-loop (cùng với các mô đun bình thường) Đối với bất cứ ai tìm kiếm một sao chép và dán giải pháp:

for ($i = count($ar)-1; $i >= 0 ; $i--){ if (($i % 2) == 0) unset ($ar[$i]); }

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