2012-06-22 9 views
22

Hi möchte fragen, ob es eine Möglichkeit gibt, dies ohne foreach ($ array als $ k => $ v) zu tun. Ich weiß, dass es funktioniert, aber ich suche nach einer eleganteren Weise, wenn Sie wissen. So war mein Array wie:PHP: setze alle Werte in einem Array auf etwas

1 = 231 
2 = 432 
3 = 324 

ich es umgedreht und es wurde: 231 => 1, 432 =>2, 324 => 3. Nun, was ich tun müssen, ist alle Werte auf '1'

+0

Sie möchten foreach nicht zu welchem ​​Zweck verwenden? Verhindern Sie den Verlust des aktuellen Index in Ihrem Array, oder müssen Sie nicht einfach die gesamte foreach Struktur manuell eingeben? –

Antwort

34

können Sie verwenden array_fill_keys:

$array = array(
    1 => 231, 
    2 => 432, 
    3 => 324 
); 

$array = array_flip($array); 

$array = array_fill_keys(array_keys($array), 1); 
+3

array_kill_keys? ;-) – acme

+13

@acme: Ich brauche mehr Kaffee ... :-P –

+3

Gib dem Kaffee immer die Schuld. : P +1 – Xethron

3

einstellen Ich glaube, Sie suchen für diese Funktion: array_fill()

Aus dem obigen Link:

„Füllt ein Array mit num Einträgen des Wertes des Wertparameters, beginnend mit dem Parameter start_index. "

Obwohl, wenn Ihre Indizes nicht numerisch sind und/oder nicht zählbare (etwa 231 bis 324 einschließlich), dann können Sie mit besser dran, als Rakete sagt, array_fill_keys() oder Ihre regelmäßigen foreach.

+1

Er möchte wahrscheinlich stattdessen 'array_fill_keys'. –

+0

Du hast Recht, vergiss das! ;) – Xunnamius

14

array_fill_keys() sollte das sein, was Sie brauchen:

$keys = array_keys($yourArray); 
$filled = array_fill_keys($keys, 1); 
1

Jede Methode, die Sie, wie array_map oder fill_keys noch eine Schleife verwenden nennen würde über iterieren das Array. Es scheint, wie Sie etwas wie array_map wollen würde, die can be found here

Wenn man bedenkt, dass mehr elegant sein, jedem das seine :)

2

ich mit der gleichen Frage auf diesem Posten bekam, aber ich am Ende immer ein anderer Ansatz.

Warum mit array_flip + array_keys anstatt einfach array_values ​​verwenden?

$array = array(
    1 => 231, 
    2 => 432, 
    3 => 324 
); 

$array = array_fill_keys(array_values($array), 1); 
+0

Die erste Antwort verwendet Array_flip + array_keys. Meine Antwort verwendet array_values, nicht die gleiche Antwort. –

10

Für PHP> 5.3 können Sie anonyme Funktionen nutzen.

array_walk($array,function(&$value){$value=1;});

Hinweis: Wert wird als Referenz übergeben.

1
array_replace(array_flip($columns), array_fill_keys($columns, 0)); 
Verwandte Themen