如何将foreach循环中的值存储到数组中?

134

需要将foreach循环中的值存储到一个数组中,需要帮忙实现。

下面的代码不起作用,只存储最后一个值,尝试过 $items .= ...,但也没有解决问题,希望得到帮助。

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

print_r($items);

14
.= 表示追加文本。[] 表示将元素添加到数组中。 - Skilldrick
迄今为止,Skilldrick用上面的一行代码就解决了问题,不需要再继续了。 - user1946891
9个回答

307

在循环外声明$items数组,并使用$items[]将项目添加到数组中:

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

print_r($items);

7
如果你不会使用 $i 这个变量,就不要提取它。 - Matteo Riva
如果一些$username为空会发生什么?我们有一个类似的情况,记录来自API,但是在数组中我们最终得到了一些空记录。 - pixelwiz

16

使用

$items[] = $username;

10
请确保在循环之前出现 $items = array(); - Skilldrick
你能帮忙解释一下为什么在循环之前必须声明 $items = array(); 吗?我做了类似的事情,没有声明它,但它仍然可以工作。添加它是否更好或者不需要呢? - robk27
@robk27 看看这个 https://dev59.com/7Gsy5IYBdhLWcg3w5CBr - Liam McArthur

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

3
不需要$count的东西。只需$array[] = $thing; - user985818
我将暂缓对此答案进行负评,因为:1.它是一个仅有代码的答案,2.教授开发者不必要或糟糕的实践方法……因为这是一个很好的机会去做出有纪律的事情,使Stackoverflow成为更好的资源。 - mickmackusa
我遇到了一个问题,我的数组只返回了最后一个被推入数组的元素。使用你建议的计数解决了我的问题。 - armin
在关联数组中,对于具有相同名称但不同值的情况,这是一个很好的答案。谢谢。 - Javanshir Huseynli

8

尝试

$items = array_values ( $group_membership );

1
我认为foreach循环做的不仅仅是这个,否则这将是最佳解决方案。 - Matteo Riva

2
这是做法:
foreach($orders as $item){
   $transactionIds[]  =   $item->generated_order_id;
}

dump($transactionIds);

假设$orders集合有一个名为“generated_order_id”的字段。

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

从您的问题中可以看出,您需要一个属于特定组别的用户名数组 :) 在这种情况下,我倾向于使用简单的while循环和一个好的SQL查询 ;)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接