【问题标题】:Echo nested foreach with no duplicates PHP回声嵌套 foreach 没有重复 PHP
【发布时间】:2013-08-07 07:34:30
【问题描述】:

我有 2 个包含相同数量项目的数组。一个存储一个类来表示社交媒体,另一个数组保存与该类配对的 URL。它们看起来像这样:

 $array1 = ([0]=>twitter,[1]=>facebook,[2]=>linkedin);
 $array2 = ([0]=>http://www.twitter.com/username123,[1]=>http://www.facebook.com/user-name123,[2]=>http://www.linkedin.com/stuff/username123);

我想同时遍历数组,在各自的位置打印数据以创建社交媒体链接。我目前有这个:

foreach ($array1 as $k1=>$class){
  foreach ($array2 as $k2=>$URL){
  echo '<li><a href="'.$URL.'" class="'.$class.'">Visit Site</a></li>';
  }
}

这将每个项目重复两次,我认为这是由于嵌套的 foreach。

如果我将 echo 语句移到嵌套函数之外,它会打印我想要的所有类,但只会从该数组中获取最后一个 URL。

如何为每个配对打印单个列表项、链接组合?我见过 array_unique 删除重复,但我是一个严肃的 PHP n00b。

谢谢。

【问题讨论】:

    标签: php foreach


    【解决方案1】:

    可能会有所帮助:

    $rgLinks = array_combine($array1, $array2);
    foreach($rgLinks as $sClass=>$sHref)
    {
       echo('<li><a href="'.$sHref.'" class="'.$sClass.'">Visit Site</a></li>');
    }
    

    【讨论】:

    • 我打算提交相同的答案。需要注意的一点是,如果 count($array1) !== count($array2); array_combine 会失败。
    • 是的,它会失败。我不确定我是否应该编辑我的评论,因为作者没有提到在这种情况下该怎么做。
    • 这很好用。而且我确实注意到 array_combine 在没有相同计数的情况下失败,但在这个用例中计数将始终匹配。
    【解决方案2】:

    IMO,尤金有最好的答案。如果 $array1 和 $array2 有不同数量的项目,我只想提另一种方式。

    foreach ($array1 as $k1=>$class){
      if (isset($array2[$k1])) {
       echo '<li><a href="'.$array2[$k1].'" class="'.$class.'">Visit Site</a></li>';
      }
    }
    

    【讨论】:

      【解决方案3】:

      你做错了。没有必要使用 2 个数组。尝试类似

      $array = array(
              'twitter' => 'http://www.twitter.com/username123',
              'facebook' => 'http://www.facebook.com/user-name123',
              'linkedin' => 'http://www.linkedin.com/stuff/username123'
           );
      
      foreach ($array as $url=>$class){
         echo '<li><a href="'.$url.'" class="'.$class.'">Visit Site</a></li>';
      }
      

      或者按照上一个答案中的建议使用array_combine

      【讨论】:

        【解决方案4】:

        您可以使用for 循环,只要它们都具有相同的count

        $length = count($array1);
        for($i=0; $i<$length; $i++)
        {
            echo '<li><a href="'.$array2[$i].'" class="'.$array2[$i].'">Visit Site</a></li>';
        }
        

        【讨论】:

        • 嗯,php 也有 for 循环。此外,将count 保持在循环之外也是一个好习惯,因为不需要重新计算。
        猜你喜欢
        • 1970-01-01
        • 2020-09-23
        • 2019-12-01
        • 2017-11-20
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 2011-03-21
        相关资源
        最近更新 更多