我如何过滤掉奇数或偶数索引的数组条目?
Array ( [0] => string1 [1] => string2 [2] => string3 [3] => string4 )
字符串我希望它从数组中删除[0]和[2]项。或者说我有0,1,2,3,4,5,6,7,8,9;我需要删除0,2,4,6,8。
n1bvdmb61#
第一个月上面从数组中删除奇数位置,要删除偶数位置,请使用以下命令:可以使用if(!($key&1))代替if($key&1)
if(!($key&1))
if($key&1)
gr8qqesn2#
这里有一个“hax”解决方案:将array_filter与“isodd”函数结合使用。array_filter似乎只对值起作用,所以你可以先使用array_flip,然后再使用array_filter。
array_flip(array_filter(array_flip($data), create_function('$a','return $a%2;')))
字符串
kg7wmglp3#
你也可以像这样使用SPL FilterIterator:
class IndexFilter extends FilterIterator { public function __construct (array $data) { parent::__construct(new ArrayIterator($data)); } public function accept () { # return even keys only return !($this->key() % 2); } } $arr = array('string1', 'string2', 'string3', 'string4'); $filtered = array(); foreach (new IndexFilter($arr) as $key => $value) { $filtered[$key] = $value; } print_r($filtered);
fnatzsnv4#
<?php function odd($var) { // returns whether the input integer is odd return($var & 1); } function even($var) { // returns whether the input integer is even return(!($var & 1)); } $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); $array2 = array(6, 7, 8, 9, 10, 11, 12); echo "Odd :\n"; print_r(array_filter($array1, "odd")); echo "Even:\n"; print_r(array_filter($array2, "even")); ?> Odd : Array ( [a] => 1 [c] => 3 [e] => 5 ) Even: Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 )
hjzp0vay5#
我会这样做
for($i = 0; $i < count($array); $i++) { if($i % 2) // OR if(!($i % 2)) { unset($array[$i]); } }
ocebsuys6#
<?php $array = array(0, 3, 5, 7, 20, 10, 99,21, 14, 23, 46); for ($i = 0; $i < count($array); $i++) { if ($array[$i]%2 !=0) echo $array[$i]."<br>"; } ?>
qcuzuvrc7#
$array = array(0 => 'string1', 1 => 'string2', 2 => 'string3', 3 => 'string4'); // Removes elements of even-numbered keys $test1 = array_filter($array, function($key) { return ($key & 1); }, ARRAY_FILTER_USE_KEY); // Removes elements of odd-numbered-keys $test2 = array_filter($array, function($key) { return !($key & 1); }, ARRAY_FILTER_USE_KEY);
字符串这个答案比this答案有一点改进。你可以使用匿名函数代替create_function。另外,array_filter接受一个可选的flag参数,让你指定回调函数将key作为唯一的参数。所以你不需要使用array_flip来获取一个key数组。
create_function
array_filter
array_flip
7条答案
按热度按时间n1bvdmb61#
第一个月
上面从数组中删除奇数位置,要删除偶数位置,请使用以下命令:
可以使用
if(!($key&1))
代替if($key&1)
gr8qqesn2#
这里有一个“hax”解决方案:
将array_filter与“isodd”函数结合使用。
array_filter似乎只对值起作用,所以你可以先使用array_flip,然后再使用array_filter。
字符串
kg7wmglp3#
你也可以像这样使用SPL FilterIterator:
字符串
fnatzsnv4#
字符串
hjzp0vay5#
我会这样做
字符串
ocebsuys6#
字符串
qcuzuvrc7#
字符串
这个答案比this答案有一点改进。你可以使用匿名函数代替
create_function
。另外,array_filter
接受一个可选的flag参数,让你指定回调函数将key作为唯一的参数。所以你不需要使用array_flip
来获取一个key数组。