php 如何根据奇数或偶数索引值筛选数组

r9f1avp5  于 2024-01-05  发布在  PHP
关注(0)|答案(7)|浏览(107)

我如何过滤掉奇数或偶数索引的数组条目?

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。

n1bvdmb6

n1bvdmb61#

第一个月
上面从数组中删除奇数位置,要删除偶数位置,请使用以下命令:
可以使用if(!($key&1))代替if($key&1)

gr8qqesn

gr8qqesn2#

这里有一个“hax”解决方案:
将array_filter与“isodd”函数结合使用。
array_filter似乎只对值起作用,所以你可以先使用array_flip,然后再使用array_filter。

array_flip(array_filter(array_flip($data), create_function('$a','return $a%2;')))

字符串

kg7wmglp

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);

字符串

fnatzsnv

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
)

字符串

hjzp0vay

hjzp0vay5#

我会这样做

for($i = 0; $i < count($array); $i++)
{
    if($i % 2) // OR if(!($i % 2))
    {
        unset($array[$i]);
    }
}

字符串

ocebsuys

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>";
}
?>

字符串

qcuzuvrc

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数组。

相关问题