【问题标题】:How to store values from foreach loop into an array?如何将 foreach 循环中的值存储到数组中?
【发布时间】:2011-03-04 00:04:25
【问题描述】:

需要将 foreach 循环中的值存储到数组中,需要帮助。

下面的代码不起作用,只存储最后一个值,尝试了$items .= ...,,但这也没有成功,任何帮助将不胜感激。

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

print_r($items);

【问题讨论】:

  • .= 附加文本。 [] 追加到数组中。
  • 到目前为止,Skilldrick 已经用上面的一个班轮把它钉牢了,不需要再进一步了。

标签: php foreach


【解决方案1】:

这就是你的做法:

foreach($orders as $item){
   $transactionIds[]  =   $item->generated_order_id;
}

dump($transactionIds);

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

【讨论】:

    【解决方案2】:

    只是为了节省你太多的错别字:

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

    【讨论】:

      【解决方案3】:

      这个问题似乎很老了,但如果你通过它,你可以使用 PHP 内置函数 array_push() 使用下面的示例将数据推送到数组中。

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

      【讨论】:

      • 进行迭代函数调用效率低下。方括号推动语法(8 年前建议)将更有效。不应使用此答案将单个元素推入数组。 (而$i的声明也没用)
      【解决方案4】:

      你可以试试我的回答,

      这是你写的:

      <?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 更快,但最后一个例子只是观察的结果。 :)

      【讨论】:

        【解决方案5】:
        $items=array(); 
        $j=0; 
        
        foreach($group_membership as $i => $username){ 
            $items[$j++]=$username; 
        }
        

        只需在您的代码中尝试上述方法。

        【讨论】:

        • 任何开发人员都不应使用此纯代码答案。根本不需要计数器和递增。
        【解决方案6】:
        <?php 
        $items = array();
        $count = 0;
        foreach($group_membership as $i => $username) { 
         $items[$count++] = $username; 
        } 
        print_r($items); 
        ?>
        

        【讨论】:

        • 不需要 $count 东西。只需 $array[] = $thing;
        • 我将推迟否决这个答案,尽管:1. 这是一个纯代码的答案 2. 教开发人员不必要/不好的做法......因为这是一个很好的机会纪律严明,让 Stackoverflow 成为更好的资源。
        • 我的数组只返回被推入数组的最后一个元素。按照您的建议使用计数解决了我的问题。
        • 在关联数组中具有相同名称的不同值的绝佳答案。谢谢。
        【解决方案7】:

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

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

        【讨论】:

        • 另外,如果您不打算使用密钥 ($i),请不要提取它。
        • 在 foreach 之前声明 $items = array(); 甚至没有必要,对吧? php 只会创建一个空数组
        • 如果某些 $username 为空会发生什么?我们有类似的情况,记录来自 API,不知何故我们在数组中得到了一些空记录。
        【解决方案8】:

        试试

        $items = array_values ( $group_membership );
        

        【讨论】:

        • 好吧,我假设 foreach 循环的作用不止于此,否则这是最好的解决方案。
        【解决方案9】:

        使用

        $items[] = $username;
        

        【讨论】:

        • 只要确保$items = array();出现在循环之前。
        • 你能帮忙解释一下为什么你必须声明 $items = array();在循环之前。我做了这样的事情并没有声明它,它仍然有效。是加还是不需要?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        • 2012-08-20
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多