Хранение четных элементов массива?

Покажите мудрость в своем требовании комментариев, и они, более вероятно, послушают.

Меньше больше.

Подчеркивают качество по количеству.

В моей команде, было нажатие для комментария всего в определенном API. Некоторые разработчики начали использовать инструмент, который автоматически генерирует комментарии путем рассмотрения имен методов и подписей.

, Например:

/// <summary>
/// Gets the Person.
/// </summary>
/// <returns>
/// A Person
/// </returns>
public Person GetPerson()
{

}

можно ли думать о большей трате экранной недвижимости? Можно ли думать о большей трате мозговых циклов, чем чтение комментариев, которые не предоставляют новой информации?

, Если это очевидно из сигнатуры метода, не говорите это! Если я могу понять его через несколько секунд, не помещайте его в комментарий. Как другие выразились, скажите мне , почему Вы приняли решение сделать это тот путь, не , что Вы сделали. Запишите свой код так, чтобы было очевидно, что это делает.

11
задан rekire 3 May 2012 в 06:42
поделиться

6 ответов

<?php
$x = range('a', 'f');

$x = array_map('array_shift', 
       array_chunk($x, 2)
     );

var_dump($x);

или другой

<?php
class ArrayEvenIterator extends ArrayIterator {
    public function next() {
        parent::next();
        return parent::next();
    }
}

$x = range('a', 'f');
$x = iterator_to_array(new ArrayEvenIterator( $x ), false);

var_dump($x);

или с закрытием php 5.3 (что не лучше, чем глобальный в этом case ;-))

<?php
$x = range('a', 'f');

$x = array_filter( $x, function($e) use(&$c) { return 0===$c++%2; });

var_dump($x);
15
ответ дан 3 December 2019 в 07:39
поделиться

Предполагая числовые ключи:

foreach ($array as $key => $value) {
    if ($key % 2 != 0) {
        unset($array[$key]);
    }
}

EDIT

Вот мое немного более безумное решение, которое сохраняет индекс непрерывным без повторной индексации. ; o)

foreach ($array as $key => $value) {
    if (!($key%2)) {
        $array[$key/2] = $value;
    }
}
$array = array_slice($array, 0, ceil(count($array)/2));
2
ответ дан 3 December 2019 в 07:39
поделиться

Если вы используете PHP 5.3 или новее или у вас установлено расширение SPL (по умолчанию вы будете использовать PHP 5), вы можете использовать FilterIterator и ArrayObject классы.

class EvenKeysFilter extends FilterIterator
{
    private function iseven($keyval)
    {
        return (($keyval % 2) == 0);
    }

    public function accept()
    {
        $keyval = $this->getInnerIterator()->key();
        return ($this->iseven($keyval));
    }
}

$input = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', );
$inputobj = new ArrayObject($input);   

$evenFilterIter = new EvenKeysFilter($inputobj->getIterator());    
$output = iterator_to_array($evenFilterIter, false);

print_r($output);

(Реквизит для VolkerK для указания iterator_to_array () )

Что правильно выводит это:

Array
(
    [0] => a
    [1] => c
    [2] => e
    [3] => g
    [4] => i
)
2
ответ дан 3 December 2019 в 07:39
поделиться

Не обязательно самый эффективный метод, но, поскольку вы упомянули, что это не обязательно требование ...

переверните, отфильтруйте, затем переверните назад.

<?php
    function even($var)
    {
        return(!($var & 1));
    }

    $input = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', );
    $flipped = array_flip($input);
    $filtered = array_filter($flipped, 'even');
    $output = array_flip($filtered);
?>
0
ответ дан 3 December 2019 в 07:39
поделиться

создать функцию-оболочку

function getInput($i)
{
     global $input;
     return $input[$i*2];
}

Я думаю, самая маленькая и самая эффективная.

-1
ответ дан 3 December 2019 в 07:39
поделиться
  function dropHalf($a){
     $f=0;
     foreach($a as $k=>$v)
       if($f = ! $f)
         unset($a[$k]);
     return $a;
  }

Это '

-2
ответ дан 3 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: