【问题标题】:PHP - Foreach (Array of an Array)PHP - Foreach(数组的数组)
【发布时间】:2009-10-02 14:19:46
【问题描述】:

这是一个例子:

for($i=1; $i < 10; $i++){
  $marray[] = array($name, $email, $password); // Lets just say for now, there is real
                                               // data for each online being input
}

foreach ($marray as $e){
   echo "Name: ". $e[0];
   echo "Email: ". $e[1];
}

我忘了说: 该脚本在我的两台服务器上都可以正常工作。但是,当我在调用“Foreach”之前包含 array_unique 时,它​​不起作用,没有错误消息或任何东西。

【问题讨论】:

  • 那么会发生什么呢?
  • 什么是预期输出,什么是实际输出?
  • 让我猜猜,你忘记了array_unique 行末尾的分号?
  • 我的本地服务器上的输出打印出一个唯一的姓名列表和他们查看的唯一项目列表。

标签: php foreach multidimensional-array


【解决方案1】:

对我来说很好用:

$name = "Phill";
$email = "me@me.com";
$password = "p@ssw0rd";

for($i=1; $i < 10; $i++){
  $marray[] = array($name, $email, $password); 

}

foreach (array_unique($marray) as $e){
   echo "Name: ". $e[0]."<br />";
   echo "Email: ". $e[1]."<br />";
}

这是返回的:

Name: Phill
Email: me@me.com

您使用的是什么版本的 PHP?

【讨论】:

    【解决方案2】:

    我会检查两台服务器都安装了哪个版本的 PHP。你可以用 phpinfo() 来做到这一点。我想不出它可以在一台服务器上运行的任何其他原因,但不能在另一台服务器上运行。 “不认识”是什么意思?你收到任何错误信息吗?如果有,它们是什么?

    【讨论】:

    • 其实我忘了说。上面的那个脚本工作正常。当我使用“array_unique”时,它就会失败。我没有收到任何错误消息,它只是“foreachs”一条记录,而不是上面的示例“10 条记录”。
    • 这里是一个截图:$q = mysql_query($strSQL); $hold = 数组(); $view = 数组(); while($rez = mysql_fetch_array($q)) { $view[] = array($rez[6],$rez[1],$rez[8],$rez[9]); $hold[] = 数组($rez[2],$rez[3],$rez[6]); } $hold = array_unique($hold);排序($持有); $view = array_unique($view);排序($视图); foreach($hold as $u){ echo $u[0]; }
    • array_unique 将数组中的任何内容(在本例中为另一个数组)转换为字符串。它并不是真正设计用于处理数组的数组,您可能想要编写自己的自定义函数。此外,导致问题的 mySQL 数据可能存在一些差异。
    【解决方案3】:

    Welp,这是我自己想出来的。我没有让它更加混乱,而是将初始文本设置为“爆炸”问题。

    【讨论】:

      【解决方案4】:

      阅读 php 文档:

      注意:请注意,array_unique() 不适用于多维数组。

      (丑陋)修复如果“email + lastname + email”是关键:

      $uniqueUsers = array();
      foreach ($users as $user) {
          $uniqueUsers[$user['name'] . $user['lastname'] . $user['email']] = $user;
      }
      

      我认为最好直接构建(如果可能的话)没有重复的数组。

      【讨论】:

        【解决方案5】:

        试试这个:

            $mstorage = array();
            foreach ($marray as $e){
            if(in_array($email, $mstorage) === FALSE) {
                echo "Name: ". $e[0]."<br />";
                echo "Email: ". $e[1]."<br />";
                array_push($mstorage, $email);
           }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-09-11
          • 1970-01-01
          • 2010-11-13
          • 2016-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-08
          • 2015-04-04
          相关资源
          最近更新 更多