Покажите мудрость в своем требовании комментариев, и они, более вероятно, послушают.
Меньше больше.
Подчеркивают качество по количеству.
В моей команде, было нажатие для комментария всего в определенном API. Некоторые разработчики начали использовать инструмент, который автоматически генерирует комментарии путем рассмотрения имен методов и подписей.
, Например:
/// <summary>
/// Gets the Person.
/// </summary>
/// <returns>
/// A Person
/// </returns>
public Person GetPerson()
{
}
можно ли думать о большей трате экранной недвижимости? Можно ли думать о большей трате мозговых циклов, чем чтение комментариев, которые не предоставляют новой информации?
, Если это очевидно из сигнатуры метода, не говорите это! Если я могу понять его через несколько секунд, не помещайте его в комментарий. Как другие выразились, скажите мне , почему Вы приняли решение сделать это тот путь, не , что Вы сделали. Запишите свой код так, чтобы было очевидно, что это делает.
<?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);
Предполагая числовые ключи:
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));
Если вы используете 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
)
Не обязательно самый эффективный метод, но, поскольку вы упомянули, что это не обязательно требование ...
переверните, отфильтруйте, затем переверните назад.
<?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);
?>
создать функцию-оболочку
function getInput($i)
{
global $input;
return $input[$i*2];
}
Я думаю, самая маленькая и самая эффективная.
function dropHalf($a){
$f=0;
foreach($a as $k=>$v)
if($f = ! $f)
unset($a[$k]);
return $a;
}
Это '