php – 保持数组的偶数元素?
发布时间:2020-12-13 16:38:45 所属栏目: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
说我有一个$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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |