Как можно отфильтровать записи массива с нечетным или четным номером индекса?
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]); } }
с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>"; } ?>