จะเก็บค่าจาก foreach loop ไปยังอาร์เรย์ได้อย่างไร?


115

ต้องการจัดเก็บค่าจาก foreach loop ลงในอาร์เรย์ต้องการความช่วยเหลือในการทำเช่นนั้น

รหัสด้านล่างใช้งานไม่ได้เก็บเฉพาะค่าสุดท้ายพยายามแล้ว$items .= ...,แต่ไม่ได้ทำเคล็ดลับเช่นกันความช่วยเหลือใด ๆ จะได้รับการชื่นชม

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

print_r($items);

12
.=ต่อท้ายข้อความ []ผนวกเข้ากับอาร์เรย์
Skilldrick

โดย Skilldrick ตอกด้วยซับด้านบนไม่จำเป็นต้องไปเพิ่มเติม
user1946891

คำตอบ:


255

ประกาศ$itemsอาร์เรย์นอกลูปและใช้$items[]เพื่อเพิ่มรายการในอาร์เรย์:

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

print_r($items);

7
นอกจากนี้อย่าแยกคีย์ ( $i) ถ้าคุณจะไม่ใช้มัน
Matteo Riva

2
การประกาศ$items = array();ต่อหน้า foreach ไม่จำเป็นด้วยซ้ำใช่ไหม? php จะสร้างอาร์เรย์ว่าง
BassMHL

จะเกิดอะไรขึ้นถ้า $ username บางส่วนเป็นโมฆะ เรามีสถานการณ์คล้าย ๆ กันที่เร็กคอร์ดกำลังมาในรูปแบบ API และอย่างใดเราก็จบลงด้วยเร็กคอร์ดว่างบางส่วนในอาร์เรย์
pixelwiz

14

ใช้

$items[] = $username;

7
ตรวจสอบให้แน่ใจว่า$items = array();ปรากฏก่อนลูป
Skilldrick

คุณช่วยอธิบายได้ไหมว่าทำไมคุณต้องประกาศ $ items = array (); ก่อนลูป ฉันทำอะไรแบบนี้และไม่ได้ประกาศและมันก็ยังใช้ได้ เพิ่มดีกว่าหรือไม่จำเป็น?
robk27

ลองดูสิ @ robk27 stackoverflow.com/questions/8246047/…
Liam McArthur

7

ลอง

$items = array_values ( $group_membership );

1
ผมคิดว่า foreach loop ทำมากกว่านั้นไม่เช่นนั้นนี่คือทางออกที่ดีที่สุด
Matteo Riva

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

3
ไม่จำเป็นต้องมีสิ่งที่นับ $ แค่ $ array [] = $ thing;

ฉันจะระงับการลงคะแนนคำตอบนี้แม้ว่า: 1. เป็นคำตอบแบบโค้ดเท่านั้นที่ 2. สอนการปฏิบัติที่ไม่จำเป็น / ไม่ดีแก่นักพัฒนา ... เพราะนี่เป็นโอกาสที่ดีในการทำสิ่งที่มีวินัยและทำให้ Stackoverflow เป็นทรัพยากรที่ดีขึ้น .
mickmackusa

ฉันมีปัญหาที่อาร์เรย์ของฉันส่งคืนเฉพาะองค์ประกอบสุดท้ายที่ถูกผลักเข้าไปในอาร์เรย์ การใช้การนับตามที่คุณแนะนำช่วยแก้ปัญหาของฉันได้
Jass Preet

2

คุณสามารถลองทำตามคำตอบของฉัน

คุณเขียนสิ่งนี้:

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

print_r($items);
?>

และในกรณีของคุณฉันจะทำสิ่งนี้:

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

ตามที่คุณแสดงในคำถามของคุณดูเหมือนว่าคุณต้องการอาร์เรย์ของชื่อผู้ใช้ที่อยู่ในกลุ่มเฉพาะ :) ในกรณีนี้ฉันชอบแบบสอบถาม sql ที่ดีพร้อมกับ while loop ที่เรียบง่าย;)

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

whileเร็วกว่า แต่ตัวอย่างสุดท้ายเป็นเพียงผลจากการสังเกตเท่านั้น :)


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

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

ลองทำตามด้านบนในโค้ดของคุณ


ผู้พัฒนาไม่ควรใช้คำตอบแบบโค้ดเท่านั้นนี้ ตัวนับและการเพิ่มไม่จำเป็นเลย
mickmackusa


-1

คำถามนี้ดูเหมือนจะค่อนข้างเก่า แต่ในกรณีที่คุณผ่านมาคุณสามารถใช้ฟังก์ชัน PHP inbuilt array_push () เพื่อส่งข้อมูลในอาร์เรย์โดยใช้ตัวอย่างด้านล่าง

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

การเรียกใช้ฟังก์ชันซ้ำจะไม่มีประสิทธิภาพ ไวยากรณ์การผลักดันวงเล็บเหลี่ยม (แนะนำ 8 ปีก่อนหน้านี้) จะมีประสิทธิภาพมากขึ้น คำตอบนี้ไม่ควรใช้เพื่อผลักดันองค์ประกอบเดี่ยวไปยังอาร์เรย์ (และการประกาศ$iก็ไร้ประโยชน์)
mickmackusa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.