Geradzahlige Elemente eines Arrays beibehalten?
Posted: 12 Jan 2025, 14:01
Angenommen, ich habe ein $input-Array, das etwa Folgendes enthält:
Ich möchte ein $output-Array erhalten, das Folgendes enthalten würde:
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:
Zweite Idee: Iteriere über das Array und entferne das, was ich nicht behalten möchte:
Dritte Idee: Verwenden Sie eine Kombination aus array_flip, range, array_diff_key, ... :
Vierte Idee: ungefähr das Gleiche, aber mit array_intersect_key:
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
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)
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)
(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));
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));
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));
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));
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
