【发布时间】:2009-04-10 16:31:42
【问题描述】:
如何过滤掉索引号为奇数或偶数的数组条目?
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。
【问题讨论】:
如何过滤掉索引号为奇数或偶数的数组条目?
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。
【问题讨论】:
foreach($arr as $key => $value) if($key&1) unset($arr[$key]);
上面从数组中删除奇数位置,要删除偶数位置,使用以下:
您可以使用if(!($key&1)) 而不是if($key&1)
【讨论】:
这是一个“hax”解决方案:
将 array_filter 与“isodd”函数结合使用。
array_filter 似乎只对值起作用,所以你可以先 array_flip 然后使用 array_filter。
array_flip(array_filter(array_flip($data), create_function('$a','return $a%2;')))
【讨论】:
您也可以像这样使用 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);
【讨论】:
<?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
)
【讨论】:
我会这样做......
for($i = 0; $i < count($array); $i++)
{
if($i % 2) // OR if(!($i % 2))
{
unset($array[$i]);
}
}
【讨论】:
<?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>";
}
?>
【讨论】:
$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 采用可选标志参数,可让您指定回调函数将键作为其唯一参数。所以你不需要使用array_flip 来获取一个键数组。
【讨论】: