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

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

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


7

Mencoba

$items = array_values ( $group_membership );

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

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


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

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

Coba saja di atas dalam kode Anda.


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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.