2011-06-29 73 views
5

我应该如何从这样的一个数组中删除所有的第二个元素(使用无非是建于PHP阵列功能):从数组中删除每个第二个元素并重新排列键?

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

当我删除所有第二个元素,我应该得到:

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

可能吗?

回答

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

$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

你是最棒的!我会在8-10分钟左右接受你的回答;) – metaforce

1

是的,当然。

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

dobar dobar;)hvala ti! – metaforce

+1

这不会重新排列键和(根据问题)这将删除0,2,4,...,但他们应该保持。 1,3,5,...应该被删除。次要的“事情”:你不应该在'for'-test-expression中使用函数,因为它会在任何迭代中被调用。另外它会导致不想要的行为,因为数组的大小会发生变化(在第一个'unset()'的大小不再是'$ maxKey + 1'之后)。 – KingCrunch

+0

@KingCrunch我只是给了他一个例子。另外我同意在for-test-expression中使用函数。但再一次,这只是一个学校的例子,他应该如何思考以解决他的问题。 –

3

另一种方法使用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

正确的方法是一个反向环(沿与通常的模量) 对于任何人寻找一个复制和粘贴溶液:

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

相关问题