php – 保持数组的偶数元素?

说我有一个$input数组,它包含这样的东西:
array
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => string 'e' (length=1)
  5 => string 'f' (length=1)
  6 => string 'g' (length=1)
  7 => string 'h' (length=1)
  8 => string 'i' (length=1)
  9 => string 'j' (length=1)

我想得到一个$output数组,包含这个:

array
  0 => string 'a' (length=1)
  1 => string 'c' (length=1)
  2 => string 'e' (length=1)
  3 => string 'g' (length=1)
  4 => string 'i' (length=1)

$output数组包含$input中的一半值;那些在输入中偶数编号的键;第一个是保存,第二个不是,第三个是,所以一个…

(注意:键不保留;只有值很重要)

我该怎么办?在数组的两个值上只保留一个?

我已经尝试了一些想法,已经有几个不同的解决方案:

第一个想法:迭代输入数组,并将有趣的值复制到输出数组:

$input = array('a','b','c','d','e','f','g','h','i','j',);
$output = array();

$nbr = count($input);
for ($i = 0 ; $i < $nbr ; $i += 2) {
    $output[] = $input[$i];
}

var_dump(array_values($output));

第二个想法:迭代数组,并取消我不想保留的内容

$input = array('a',);
$output = $input;

$nbr = count($input);
for ($i = 1 ; $i < $nbr ; $i += 2) {
    unset($output[$i]);
}

var_dump(array_values($output));

第三个想法:使用array_flip,range,array_diff_key,…的组合:

$input = array('a',);
$output = array();

$keys_to_exclude = array_flip(range(1,count($input)-1,2));
$output = array_diff_key($input,$keys_to_exclude);

var_dump(array_values($output));

第四个想法:大致相同的事情,但是使用array_intersect_key:

$input = array('a',);
$output = array();

$keys_to_include = array_flip(range(0,2));
$output = array_intersect_key($input,$keys_to_include);

var_dump(array_values($output));

任何其他想法?甚至/特别是如果它听起来有点黑客或任何东西?

我的目标不是获得最有效率或简单的语法;这只是为了好玩,因为我很好奇,实际上是^^

如果标题没有使用正确的词语来形容我想要的,请不要犹豫;或编辑它:-)

<?PHP
$x = range('a','f');

$x = array_map('array_shift',array_chunk($x,2)
     );

var_dump($x);

或另一个

<?PHP
class ArrayEvenIterator extends ArrayIterator {
    public function next() {
        parent::next();
        return parent::next();
    }
}

$x = range('a','f');
$x = iterator_to_array(new ArrayEvenIterator( $x ),false);

var_dump($x);

或者使用PHP 5.3关闭(在这种情况下不比全局更好)-))

<?PHP
$x = range('a','f');

$x = array_filter( $x,function($e) use(&$c) { return 0===$c++%2; });

var_dump($x);

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...