Як зберігати значення з циклу foreach в масив?


115

Потрібно зберігати значення з циклу foreach в масив, потрібна допомога в цьому.

Код, наведений нижче, не працює, зберігає останнє значення, випробуваний, $items .= ...,але це теж не робить фокус, будь-яка допомога буде вдячна.

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

print_r($items);

12
.=додає текст. []додається до масиву.
Skilldrick

Далеко Skilldrick прибив її одним вкладишем вище, не потрібно йти далі.
користувач1946891

Відповіді:


255

Оголосити $itemsмасив поза циклом і використовувати $items[]для додавання елементів до масиву:

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

print_r($items);

7
Крім того, не виймайте ключ ( $i), якщо ви не збираєтесь його використовувати.
Маттео Ріва

2
Декларувати $items = array();перед передчуттям навіть не потрібно, правда? php просто створить порожній масив
BassMHL

що трапиться, якщо частина ім'я $ ім'я недійсне? У нас є аналогічна ситуація, коли записи надходять з API, і якимось чином ми закінчуємо деякими нульовими записами в масиві.
pixelwiz

14

Використовуйте

$items[] = $username;

7
Просто переконайтеся, що $items = array();з’являється перед циклом.
Skilldrick

Чи можете ви допомогти пояснити, чому вам потрібно оголосити $ items = array (); перед циклом. Я щось подібне зробив і не заявив, і це все ще працює. Краще додати його чи не потрібно?
robk27



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

3
Немає потреби в рахунку $. Просто $ масив [] = $ річ;

Я збираюся зупинятися на тому, щоб: .
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;)

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

0

Просто, щоб врятувати вас занадто багато помилок:

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

-1

це питання здається досить старим, але якщо ви його перейшли, ви можете використовувати вбудовану функцію PHP array_push () для переміщення даних у масив, використовуючи приклад нижче.

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

Здійснення повторних викликів функцій неефективне. Синтаксис проштовхування квадратних дужок (запропонований на 8 років раніше) буде більш ефективним. Цю відповідь не слід використовувати для проштовхування окремих елементів у масив. (а декларація $iмарною)
mickmackusa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.