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

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Сохранение четных элементов массива?

Сообщение Anonymous »

Предположим, у меня есть массив $input, который содержит что-то вроде этого:

Код: Выделить всё

array
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
3 => string 'd' (length=1)
4 => string 'e' (length=1)
5 => string 'f' (length=1)
6 => string 'g' (length=1)
7 => string 'h' (length=1)
8 => string 'i' (length=1)
9 => string 'j' (length=1)
Я хочу получить массив $output, который будет содержать следующее:

Код: Выделить всё

array
0 => string 'a' (length=1)
1 => string 'c' (length=1)
2 => string 'e' (length=1)
3 => string 'g' (length=1)
4 => string 'i' (length=1)
Массив $output содержит половину значений, которые были в $input ; те, у которых на входе были четные клавиши; первый сохраняется, второй нет, третий есть, и так один...

(Примечание: ключи не сохраняются; только ценности важны)

Как я могу это сделать? Хранить только одно из двух значений массива?



Я уже пробовал некоторые идеи, и уже есть несколько разных решений:

Первая идея: перебрать входной массив и скопировать интересные значения в выходной массив:

Код: Выделить всё

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

$nbr = count($input);
for ($i = 0 ; $i < $nbr ; $i += 2) {
$output[] = $input[$i];
}

var_dump(array_values($output));
Вторая идея: перебрать массив и отключить то, что я не хочу сохранять:

Код: Выделить всё

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

$nbr = count($input);
for ($i = 1 ; $i < $nbr ; $i += 2) {
unset($output[$i]);
}

var_dump(array_values($output));
Третья идея: используйте комбинацию array_flip, range, array_diff_key, ... :

Код: Выделить всё

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

$keys_to_exclude = array_flip(range(1, count($input)-1, 2));
$output = array_diff_key($input, $keys_to_exclude);

var_dump(array_values($output));
Четвертая идея: примерно то же самое, но с array_intersect_key:

Код: Выделить всё

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

$keys_to_include = array_flip(range(0, count($input)-1, 2));
$output = array_intersect_key($input, $keys_to_include);

var_dump(array_values($output));
Есть еще идеи? Даже/особенно если это звучит как-то хакерски или что-то в этом роде?

Моя цель — не получить наиболее эффективный или простой синтаксис; вообще-то, это просто для развлечения и потому, что мне любопытно ^^

Если в заголовке используются неправильные слова, чтобы описать то, что я хочу, не стесняйтесь сказать; или отредактируйте его :-)

Подробнее здесь: https://stackoverflow.com/questions/121 ... f-an-array
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»