Jak przechowywać wartości z pętli foreach w tablicy?

115

Trzeba przechowywać wartości z pętli foreach w tablicy, potrzebuję pomocy.

Poniższy kod nie działa, przechowuje tylko ostatnią wartość, wypróbowaną, $items .= ...,ale to też nie działa, każda pomoc zostanie doceniona.

foreach($group_membership as $i => $username) {
    $items = array($username);
}

print_r($items);
Ćwiek
źródło
12
.=dołącza tekst. []dołącza do tablicy.
Skilldrick
Zdecydowanie Skilldrick przybił go jedną linią powyżej, nie trzeba było iść dalej.
user1946891

Odpowiedzi:

255

Zadeklaruj $itemstablicę poza pętlą i użyj, $items[]aby dodać elementy do tablicy:

$items = array();
foreach($group_membership as $username) {
 $items[] = $username;
}

print_r($items);
Andy E.
źródło
7
Nie wyodrębniaj klucza ( $i), jeśli nie zamierzasz go używać.
Matteo Riva
2
Deklarowanie $items = array();przed foreach nie jest nawet konieczne, prawda? php utworzy po prostu pustą tablicę
BassMHL
co by się stało, gdyby część $ username była pusta? Mamy podobną sytuację, w której rekordy pochodzą z interfejsu API i jakoś kończymy z pustymi rekordami w tablicy.
pixelwiz
14

Posługiwać się

$items[] = $username;
Sjoerd
źródło
7
Tylko upewnij $items = array();się, że pojawi się przed pętlą.
Skilldrick
Czy możesz pomóc wyjaśnić, dlaczego musisz zadeklarować $ items = array (); przed pętlą. Zrobiłem coś takiego i nie zadeklarowałem tego i nadal działa. Czy lepiej go dodać, czy nie jest to wymagane?
robk27
Sprawdź to @ robk27 stackoverflow.com/questions/8246047/ ...
Liam McArthur
7

Próbować

$items = array_values ( $group_membership );
Dogbert
źródło
1
Cóż, zakładam, że pętla foreach robi więcej, w przeciwnym razie jest to najlepsze rozwiązanie.
Matteo Riva
5
<?php 
$items = array();
$count = 0;
foreach($group_membership as $i => $username) { 
 $items[$count++] = $username; 
} 
print_r($items); 
?>
sushil bharwani
źródło
3
Nie ma potrzeby liczenia dolarów. Tylko $ tablica [] = $ rzecz;
Mam zamiar wstrzymać się z odrzuceniem tej odpowiedzi, chociaż: 1. Jest to odpowiedź składająca się tylko z kodu, która 2. uczy deweloperów niepotrzebnych / złych praktyk ... ponieważ jest to wielka szansa na zrobienie rzeczy zdyscyplinowanej i uczynienie Stackoverflow lepszym zasobem .
mickmackusa
Mam problem polegający na tym, że moja tablica zwraca tylko ostatni element, który został wstawiony do tablicy. Korzystanie z licznika zgodnie z sugestią rozwiązało mój problem.
Jass Preet
2

Możesz spróbować odpowiedzieć,

napisałeś to:

<?php
foreach($group_membership as $i => $username) {
    $items = array($username);
}

print_r($items);
?>

A w twoim przypadku zrobiłbym to:

<?php
$items = array();
foreach ($group_membership as $username) { // If you need the pointer (but I don't think) you have to add '$i => ' before $username
    $items[] = $username;
} ?>

Jak pokazałeś w swoim pytaniu, wygląda na to, że potrzebujesz tablicy nazw użytkowników należących do określonej grupy :) W tym przypadku wolę dobre zapytanie sql z prostą pętlą while;)

<?php
$query = "SELECT `username` FROM group_membership AS gm LEFT JOIN users AS u ON gm.`idUser` = u.`idUser`";
$result = mysql_query($query);
while ($record = mysql_fetch_array($result)) { \
    $items[] = $username; 
} 
?>

whilejest szybszy, ale ostatni przykład jest tylko wynikiem obserwacji. :)

Massimo
źródło
0
$items=array(); 
$j=0; 

foreach($group_membership as $i => $username){ 
    $items[$j++]=$username; 
}

Po prostu wypróbuj powyższe w swoim kodzie.

CuriousCase
źródło
Ta odpowiedź zawierająca tylko kod nie powinna być używana przez żadnych programistów. Licznik i inkrementacja nie są w ogóle potrzebne.
mickmackusa
0

Tylko po to, aby zaoszczędzić Ci zbyt wielu literówek:

foreach($group_membership as $username){
        $username->items = array(additional array to add);
    }
    print_r($group_membership);
Don Phelix
źródło
-1

to pytanie wydaje się dość stare, ale na wypadek, gdybyś je zdał, możesz użyć wbudowanej funkcji PHP array_push () do wypychania danych w tablicy, korzystając z poniższego przykładu.

<?php
    $item = array();
    foreach($group_membership as $i => $username) {
        array_push($item, $username);
    }
    print_r($items);
?>
Adeojo Emmanuel IMM
źródło
Wykonywanie iterowanych wywołań funkcji jest nieefektywne. Składnia wypychająca nawias kwadratowy (sugerowana 8 lat wcześniej) będzie bardziej wydajna. Tej odpowiedzi nie należy używać do umieszczania pojedynczych elementów w tablicy. (a deklaracja $ijest bezużyteczna)
mickmackusa