Bagaimana cara menyimpan nilai dari foreach loop ke dalam array?

115

Perlu menyimpan nilai dari foreach loop ke dalam array, butuh bantuan untuk melakukannya.

Kode di bawah tidak berfungsi, hanya menyimpan nilai terakhir, dicoba $items .= ...,tetapi itu juga tidak berhasil, bantuan apa pun akan dihargai.

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

print_r($items);
Brad
sumber
12
.=menambahkan teks. []ditambahkan ke array.
Skilldrick
Sejauh ini, Skilldrick berhasil dengan satu liner di atas tidak perlu melangkah lebih jauh.
pengguna1946891

Jawaban:

255

Deklarasikan $itemsarray di luar loop dan gunakan $items[]untuk menambahkan item ke array:

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

print_r($items);
Andy E
sumber
7
Selain itu, jangan mengekstrak kunci ( $i) jika Anda tidak akan menggunakannya.
Matteo Riva
2
Mendeklarasikan $items = array();sebelumnya bahkan tidak perlu, bukan? php hanya akan membuat array kosong
BassMHL
apa yang akan terjadi jika beberapa dari $ username adalah null? Kami memiliki situasi serupa di mana catatan datang dari API, dan entah bagaimana kita berakhir dengan beberapa catatan nol dalam larik.
pixelwiz
14

Menggunakan

$items[] = $username;
Sjoerd
sumber
7
Pastikan saja $items = array();muncul sebelum loop.
Skilldrick
Dapatkah Anda membantu menjelaskan mengapa Anda harus mendeklarasikan $ items = array (); sebelum loop. Saya melakukan sesuatu seperti ini dan tidak menyatakannya dan masih berhasil. Apakah lebih baik menambahkannya atau tidak diperlukan?
robk27
Lihat ini @ robk27 stackoverflow.com/questions/8246047/…
Liam McArthur
7

Mencoba

$items = array_values ( $group_membership );
Dogbert
sumber
1
Yah saya berasumsi loop foreach melakukan lebih dari itu, jika tidak ini adalah solusi terbaik.
Matteo Riva
5
<?php 
$items = array();
$count = 0;
foreach($group_membership as $i => $username) { 
 $items[$count++] = $username; 
} 
print_r($items); 
?>
sushil bharwani
sumber
3
Tidak perlu $ count barang. Hanya $ array [] = $ benda;
Saya akan menahan downvoting jawaban ini meskipun: 1. Ini adalah jawaban hanya kode yang 2. Mengajari pengembang praktik yang tidak perlu / buruk ... karena ini adalah kesempatan besar untuk melakukan hal Disiplin dan membuat Stackoverflow menjadi sumber yang lebih baik .
mickmackusa
Saya memiliki masalah di mana array saya hanya mengembalikan elemen terakhir yang didorong ke dalam array. Menggunakan hitungan seperti yang Anda sarankan untuk menyelesaikan masalah saya.
Jass Preet
2

Anda dapat mencoba melakukan jawaban saya,

Anda menulis ini:

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

print_r($items);
?>

Dan dalam kasus Anda, saya akan melakukan ini:

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

Seperti yang Anda tunjukkan dalam pertanyaan Anda, tampaknya Anda membutuhkan array nama pengguna yang ada dalam grup tertentu :) Dalam hal ini saya lebih suka kueri sql yang baik dengan loop sementara yang sederhana;)

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

whilelebih cepat, tetapi contoh terakhir hanyalah hasil observasi. :)

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

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

Coba saja di atas dalam kode Anda.

CuriousCase
sumber
Jawaban hanya kode ini tidak boleh digunakan oleh pengembang mana pun. Penghitung dan penambahan tidak diperlukan sama sekali.
mickmackusa
0

Hanya untuk menghemat terlalu banyak kesalahan ketik:

foreach($group_membership as $username){
        $username->items = array(additional array to add);
    }
    print_r($group_membership);
Don Phelix
sumber
-1

pertanyaan ini tampaknya cukup lama tetapi jika Anda melewatinya, Anda dapat menggunakan fungsi bawaan PHP array_push () untuk mendorong data dalam array menggunakan contoh di bawah ini.

<?php
    $item = array();
    foreach($group_membership as $i => $username) {
        array_push($item, $username);
    }
    print_r($items);
?>
Adeojo Emmanuel IMM
sumber
Membuat panggilan fungsi berulang tidak efisien. Sintaks mendorong tanda kurung siku (disarankan 8 tahun sebelumnya) akan lebih efisien. Jawaban ini tidak boleh digunakan untuk mendorong elemen tunggal ke dalam larik. (dan pernyataan $itidak berguna)
mickmackusa