Geradzahlige Elemente eines Arrays beibehalten?Php

PHP-Programmierer chatten hier
Guest
 Geradzahlige Elemente eines Arrays beibehalten?

Post by Guest »

Angenommen, ich habe ein $input-Array, das etwa Folgendes enthält:

Code: Select all

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)
Ich möchte ein $output-Array erhalten, das Folgendes enthalten würde:

Code: Select all

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)
Das Array $output enthält die Hälfte der Werte, die in $input waren; diejenigen, deren Eingabe gerade nummerierte Tasten hatte; Der erste bleibt erhalten, der zweite nicht, der dritte und so weiter...

(Hinweis: Die Schlüssel bleiben nicht erhalten; nur die Werte sind wichtig)

Wie könnte ich das machen? Nur einen von zwei Werten des Arrays beibehalten?



Ich habe bereits einige Ideen ausprobiert, und zwar schon Ich habe ein paar verschiedene Lösungen:

Erste Idee: Iterieren Sie über das Eingabearray und kopieren Sie die interessanten Werte in das Ausgabearray:

Code: Select all

$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));
Zweite Idee: Iteriere über das Array und entferne das, was ich nicht behalten möchte:

Code: Select all

$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));
Dritte Idee: Verwenden Sie eine Kombination aus array_flip, range, array_diff_key, ... :

Code: Select all

$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));
Vierte Idee: ungefähr das Gleiche, aber mit array_intersect_key:

Code: Select all

$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));
Irgendwelche anderen Ideen? Auch/vor allem, wenn es ein bisschen kitschig oder so klingt?

Mein Ziel ist es nicht, die effizienteste oder einfachste Syntax zu bekommen; Es ist nur zum Spaß und weil ich neugierig bin ^^

Wenn der Titel nicht die richtigen Worte verwendet, um zu beschreiben, was ich will, Zögern Sie nicht, es zu sagen; oder bearbeiten :-)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post