php - 保留数组的偶数元素?

标签 php arrays

假设我有一个 $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', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', );
$output = $input;

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

var_dump(array_values($output));

第三个想法:使用array_fliprangearray_diff_key、...的组合:

$input = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', );
$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', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', );
$output = array();

$keys_to_include = array_flip(range(0, count($input)-1, 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 闭包(在这种情况下并不比 global 好 ;-) )

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

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

var_dump($x);

关于php - 保留数组的偶数元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1218591/

相关文章:

php - 如何使用动态复选框?

php - Laravel - 验证 - 如果字段为空则需要

php - xsendFile 下载有 0 个字节

php - CodeIgniter 中的 CSS 文件问题

JavaScript 多维数组

php - 如果用户正在编辑项目,则锁定详细信息 View

javascript - $.when 有任意数量的延迟对象?

java - (Java)我不知道如何用所需的计数器控制循环填充数组

javascript - 从 JSON 中删除重复的元素并对一列求和

java - 在 Java 中,二维数组是否比一维数组使用更多的资源?