Làm thế nào để lưu trữ các giá trị từ vòng lặp foreach vào một mảng?


115

Cần lưu trữ các giá trị từ vòng lặp foreach vào một mảng, cần trợ giúp để thực hiện điều đó.

Đoạn mã dưới đây không hoạt động, chỉ lưu trữ giá trị cuối cùng, đã thử $items .= ...,nhưng điều đó cũng không thực hiện được thủ thuật, bất kỳ trợ giúp nào sẽ được đánh giá cao.

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

print_r($items);

12
.=nối văn bản. []nối vào một mảng.
Skilldrick

Đến nay Skilldrick đã đóng đinh nó bằng một lớp lót ở trên mà không cần phải đi xa hơn nữa.
user1946891

Câu trả lời:


255

Khai báo $itemsmảng bên ngoài vòng lặp và sử dụng $items[]để thêm các mục vào mảng:

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

print_r($items);

7
Ngoài ra, không giải nén khóa ( $i) nếu bạn không sử dụng nó.
Matteo Riva

2
Khai báo $items = array();trước thậm chí không cần thiết, phải không? php sẽ chỉ cần tạo một mảng trống rỗng
BassMHL

điều gì sẽ xảy ra nếu một số tên người dùng $ rỗng? Chúng tôi gặp một tình huống tương tự khi các bản ghi đang tạo thành một API và bằng cách nào đó, chúng tôi kết thúc với một số bản ghi rỗng trong mảng.
pixelwiz

14

Sử dụng

$items[] = $username;

7
Chỉ cần đảm bảo $items = array();xuất hiện trước vòng lặp.
Skilldrick

Bạn có thể giải thích giúp tại sao bạn phải khai báo $ items = array (); trước vòng lặp. Tôi đã làm điều gì đó như thế này và không khai báo nó và nó vẫn hoạt động. Tốt hơn là thêm nó hay là nó không bắt buộc?
robk 27

Hãy xem điều này tại @ robk27 stackoverflow.com/questions/8246047/…
Liam McArthur.

7

Thử

$items = array_values ( $group_membership );

1
Tôi cho rằng vòng lặp foreach còn làm được nhiều hơn thế, nếu không thì đây là giải pháp tốt nhất.
Matteo Riva

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

3
Không cần công cụ đếm $. Chỉ $ array [] = $ điều;

Tôi sẽ không tán thành câu trả lời này mặc dù: 1. Đây là câu trả lời chỉ có mã 2. Tìm kiếm các nhà phát triển những phương pháp không cần thiết / không tốt ... bởi vì đây là cơ hội tuyệt vời để thực hiện Điều có kỷ luật và biến Stackoverflow trở thành một tài nguyên tốt hơn .
mickmackusa

Tôi gặp sự cố trong đó mảng của tôi chỉ trả về phần tử cuối cùng đã được đẩy vào mảng. Sử dụng số lượng do bạn đề xuất đã giải quyết vấn đề của tôi.
Jass Preet

2

Bạn có thể thử làm câu trả lời của tôi,

bạn đã viết cái này:

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

print_r($items);
?>

Và trong trường hợp của bạn, tôi sẽ làm điều này:

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

Như bạn trình bày trong câu hỏi của mình, có vẻ như bạn cần một mảng tên người dùng nằm trong một nhóm cụ thể :) Trong trường hợp này, tôi thích một truy vấn sql tốt với vòng lặp while đơn giản;)

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

whilenhanh hơn, nhưng ví dụ cuối cùng chỉ là kết quả của một quan sát. :)


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

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

Chỉ cần thử những điều trên trong mã của bạn.


Câu trả lời chỉ có mã này không nên được sử dụng bởi bất kỳ nhà phát triển nào. Bộ đếm và tăng dần không cần thiết.
mickmackusa

0

Chỉ để giúp bạn tiết kiệm quá nhiều lỗi chính tả:

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

-1

Câu hỏi này có vẻ khá cũ nhưng trong trường hợp bạn vượt qua nó, bạn có thể sử dụng hàm tích hợp sẵn trong PHP array_push () để đẩy dữ liệu trong một mảng bằng ví dụ bên dưới.

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

Thực hiện các cuộc gọi hàm lặp đi lặp lại là không hiệu quả. Cú pháp đẩy dấu ngoặc vuông (được đề xuất 8 năm trước đó) sẽ hiệu quả hơn. Câu trả lời này không nên được sử dụng để đẩy các phần tử đơn lẻ vào một mảng. (và tuyên bố $ilà vô ích)
mickmackusa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.