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);

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);

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


7

Próbować

$items = array_values ( $group_membership );

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); 
?>

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. :)


0
$items=array(); 
$j=0; 

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

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


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);

-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);
?>

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.