Dizi filtre - tek hatta

4 Cevap php

Nasıl garip hatta dizin numarası ile dizi girdileri dışarı bir filtre?

Array
(
    [0] => string1
    [1] => string2
    [2] => string3
    [3] => string4
)

Like, i want it remove the [0] and [2] entries from the array. Or say i have 0,1,2,3,4,5,6,7,8,9 - i would need to remove 0,2,4,6,8.

4 Cevap

foreach($arr as $key => $value) if($key&1) unset($arr[$key]);

Bunun yerine if($key&1) kullanabilirsiniz if(!($key&1))

İşte "hax" çözüm:

Bir "ISODD" fonksiyonu ile birlikte array_filter kullanın.

array_filter sadece değerler üzerinde çalışmak gibi görünüyor, bu nedenle ilk array_flip ve sonra array_filter kullanabilirsiniz.

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

Siz de böyle SPL FilterIterator kullanabilirsiniz:

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

Ben böyle yapardım ...

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