2012-06-22 17 views
22

Witam chcę zapytać, czy jest sposób na zrobienie tego bez foreach ($ tablica jako $ k => $ v). Wiem, że to zadziała, ale szukam bardziej eleganckiego sposobu, jeśli wiesz. Więc moja tablica była jak:PHP: ustaw wszystkie wartości w tablicy na coś

1 = 231 
2 = 432 
3 = 324 

Włączyłam go i stało się: 231 => 1, 432 =>2, 324 => 3. Teraz to, co muszę zrobić, to ustawić wszystkie wartości '1'

+0

Chcesz zrezygnować z używania foreach do tego celu? Zapobiegaj utracie aktualnego indeksu w swojej tablicy lub po prostu nie musisz ręcznie wpisywać całej struktury foreach? –

Odpowiedz

34

Można użyć 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: Potrzebuję więcej kawy ... :-P –

+3

Zawsze winić to na kawę. : P +1 – Xethron

3

wierzę szukasz tej funkcji: array_fill()

od powyższego linku:

„wypełnia tablicę z wpisami num wartości parametru value, klucze zaczynające się od parametru start_index. "

Chociaż jeśli indeksy nie są numeryczne i/lub nie są przeliczalne (powiedzmy, od 231 do 324 włącznie), to może być lepiej z, jak mówi Rakieta, array_fill_keys() lub regularnego foreach.

+1

Prawdopodobnie chce "array_fill_keys" zamiast tego. –

+0

Masz rację, zapomniałem o tym! ;) – Xunnamius

14

array_fill_keys() powinno być to, czego potrzebujesz:

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

Każda metoda, że ​​zadzwonisz, takich jak array_map lub fill_keys nadal będzie za pomocą pętli iteracyjne nad tablica. Wydaje się, że chcesz coś takiego jak array_map, który can be found here

Jeśli wziąć pod uwagę, że aby być bardziej elegancki, każdemu jego własne :)

2

mam na to stanowisko z tym samym pytaniem, ale skończyło się kolejny aproach.

Dlaczego używać array_flip + array_keys zamiast po prostu użyć wartości array_values?

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

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

Pierwsza odpowiedź to użycie array_flip + array_keys. Moja odpowiedź używa wartości array_values, a nie tej samej odpowiedzi. –

10

Dla PHP> 5,3 można użyć anonimowych funkcje.

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

Uwaga: wartość jest przekazywana przez odniesienie.

1
array_replace(array_flip($columns), array_fill_keys($columns, 0)); 
Powiązane problemy