Foreach döngüsündeki değerler bir diziye nasıl saklanır?


115

Foreach döngüsündeki değerleri bir diziye kaydetmeniz gerekiyor, bunu yapmak için yardıma ihtiyacınız var.

Aşağıdaki kod çalışmıyor, sadece son değeri saklar, denendi $items .= ...,ama bu da işe yaramıyor , herhangi bir yardım takdir edilecektir.

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

print_r($items);

12
.=metin ekler. []bir diziye eklenir.
Skilldrick

Şimdiye kadar Skilldrick, daha ileri gitmeye gerek kalmadan yukarıda tek astarla çiviledi.
user1946891

Yanıtlar:


255

$itemsDöngünün dışındaki diziyi bildirin ve diziye $items[]öğeler eklemek için kullanın :

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

print_r($items);

7
Ayrıca, kullanmayacaksanız anahtarı ( $i) çıkarmayın .
Matteo Riva

2
Foreach'tan $items = array();önce bildirmek gerekli bile değil, değil mi? php sadece boş bir dizi oluşturacak
BassMHL

$ username’den bazıları boşsa ne olur? Kayıtların bir API'den geldiği benzer bir durumumuz var ve bir şekilde dizide bazı boş kayıtlarla karşılaşıyoruz.
pixelwiz

14

kullanım

$items[] = $username;

7
$items = array();Döngüden önce göründüğünden emin olun .
Skilldrick

$ İtems = array (); neden bildirmeniz gerektiğini açıklamaya yardımcı olabilir misiniz? döngüden önce. Böyle bir şey yaptım ve açıklamadım ve hala çalışıyor. Eklemek daha mı iyi yoksa gerekli değil mi?
robk27


7

Deneyin

$items = array_values ( $group_membership );

1
Foreach döngüsünün bundan daha fazlasını yaptığını varsayıyorum, aksi takdirde bu en iyi çözümdür.
Matteo Riva

5
<?php 
$items = array();
$count = 0;
foreach($group_membership as $i => $username) { 
 $items[$count++] = $username; 
} 
print_r($items); 
?>

3
$ Count şeylerine gerek yok. Sadece $ dizi [] = $ şey;

Bununla birlikte, bu yanıta olumsuz oy vermeyi erteleyeceğim: 1. Bu yalnızca kod içeren bir yanıttır, 2. Geliştiricilere gereksiz / kötü uygulamaları öğretir ... çünkü bu, Disiplinli şeyi yapmak ve Stackoverflow'u daha iyi bir kaynak yapmak için büyük bir fırsattır. .
mickmackusa

Dizimin yalnızca diziye gönderilen son öğeyi döndürdüğü sorunum var. Saymayı önerdiğiniz şekilde kullanmak sorunumu çözdü.
Jassen Preet

2

Cevabımı deneyebilirsin

bunu sen yazdın:

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

print_r($items);
?>

Ve senin durumunda bunu yapardım:

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

Sorunuzda gösterdiğiniz gibi belirli bir grupta bulunan bir dizi kullanıcı adına ihtiyacınız var gibi görünüyor :) Bu durumda basit bir while döngüsüne sahip iyi bir sql sorgusu tercih ediyorum;)

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

whiledaha hızlıdır, ancak son örnek yalnızca bir gözlemin sonucudur. :)


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

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

Yukarıdakileri kodunuzda deneyin.


Bu yalnızca kod cevabı hiçbir geliştirici tarafından kullanılmamalıdır. Sayaç ve artış hiç gerekli değildir.
mickmackusa

0

Sadece sizi çok fazla yazım hatasından kurtarmak için:

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

-1

bu soru oldukça eski görünüyor, ancak geçerseniz, aşağıdaki örneği kullanarak bir diziye veri göndermek için PHP inbuilt işlevini array_push () kullanabilirsiniz.

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

Yinelenen işlev çağrıları yapmak verimsizdir. Köşeli ayraç itme sözdizimi (8 yıl önce önerilir) daha verimli olacaktır. Bu cevap, tek öğeleri bir diziye itmek için kullanılmamalıdır. (ve beyanı $iişe yaramaz)
mickmackusa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.