Как сохранить значения из цикла foreach в массив?


115

Необходимо сохранить значения из цикла foreach в массив, нужна помощь в этом.

Приведенный ниже код не работает, сохраняет только последнее использованное значение, $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), если вы не собираетесь его использовать.
Маттео Рива,

2
Объявление $items = array();перед foreach даже не обязательно, верно? php просто создаст пустой массив
BassMHL

что произойдет, если некоторые из $ username будут нулевыми? У нас есть аналогичная ситуация, когда записи поступают из API, и каким-то образом мы заканчиваем с некоторыми нулевыми записями в массиве.
pixelwiz

14

Использовать

$items[] = $username;

7
Просто убедитесь, что $items = array();появляется перед петлей.
Skilldrick

Не могли бы вы объяснить, почему вам нужно объявить $ items = array (); перед петлей. Я сделал что-то подобное и не объявил об этом, и это все еще работает. Лучше добавить или не требуется?
robk27


7

Пытаться

$items = array_values ( $group_membership );

1
Я предполагаю, что цикл foreach делает больше, иначе это лучшее решение.
Маттео Рива,

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

3
Не нужно ничего $ count. Просто $ array [] = $ thing;

Я собираюсь воздержаться от голосования за этот ответ, хотя: 1. Это ответ только для кода, который 2. обучает разработчиков ненужным / плохим методам ... потому что это отличный шанс сделать дисциплинированную вещь и сделать Stackoverflow лучшим ресурсом .
mickmackusa

У меня проблема, когда мой массив возвращает только последний элемент, который был помещен в массив. Использование счетчика, предложенное вами, решило мою проблему.
Джасс Прит,

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.