从数组中删除每个第二个元素并重新排列键?

时间:2011-06-29 09:54:33

标签: php arrays

我应该如何从这样的数组中删除每个第二个元素(除了PHP中的内置数组函数之外):

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

当我删除每一个元素时,我应该得到:

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

可能的?

4 个答案:

答案 0 :(得分:16)

$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 :(得分: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);

答案 2 :(得分:1)

是的,当然。

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

答案 3 :(得分:0)

正确的方法是反向循环(以及通常的模数) 对于任何寻找复制和粘贴解决方案的人来说:

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