Код: Выделить всё
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)
Код: Выделить всё
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)
(Примечание: ключи не сохраняются; только ценности важны)
Как я могу это сделать? Хранить только одно из двух значений массива?
Я уже пробовал некоторые идеи, и уже есть несколько разных решений:
Первая идея: перебрать входной массив и скопировать интересные значения в выходной массив:
Код: Выделить всё
$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));
Код: Выделить всё
$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));
Код: Выделить всё
$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
Мобильная версия