Foreach循环,但是对于第一个键执行其他操作

时间:2010-07-21 00:12:26

标签: php foreach

很抱歉,如果这令人困惑。我很难掌握初学PHP知识。

我正在使用以下foreach循环:

foreach ($_POST['technologies'] as $technologies){
    echo ", " . $technologies;
}

产生:

  

,First,Second,Third

我想要的是什么:

  

第一,第二,第三

我需要的是循环跳过第一个键的echo ", "。我怎么能做到这一点?

5 个答案:

答案 0 :(得分:21)

您可以使用=>提取每个数组项的索引,而不是为第一项打印逗号:

foreach ($_POST['technologies'] as $i => $technologies) {
    if ($i > 0) {
        echo ", ";
    }

    echo $technologies;
}

或者,更简单的是,你可以使用implode($glue, $pieces),它“以相同的顺序返回包含所有数组元素的字符串表示的字符串,并在每个元素之间使用粘合字符串”:

echo implode(", ", $_POST['technologies']);

答案 1 :(得分:4)

对于在foreach循环的每次迭代中执行某些操作的一般情况:

$first = true;
foreach ($_POST['technologies'] as $technologies){
    if(!$first) {
      echo ", ";
    } else {
      $first = false;
    }
    echo $technologies;
}

但是implode()是处理你这个特定问题的最佳方法:

echo implode(", ", $_POST['technologies']);

答案 2 :(得分:1)

你需要某种旗帜:

$i = 1;
foreach ($_POST['technologies'] as $technologies){
  if($i > 1){
    echo ", " . $technologies;
  } else {
    echo $technologies;
  }
  $i++;
}

答案 3 :(得分:1)

添加一个使用数组的第一个键处理所有类型数组的答案:

# get the first key in array using the current iteration of array_keys (a.k.a first)
$firstKey = current(array_keys($array)); 

foreach ($array as $key => $value)
{
    # if current $key !== $firstKey, prepend the ,
    echo ($key !== $firstKey ? ', ' : ''). $value;
}

demo

答案 4 :(得分:0)

为什么不简单地使用PHP内置函数implode()来更轻松地以更少的代码来完成此任务?

赞:

<?php
$a = ["first","second","third"];
echo implode($a, ", ");

根据您的情况,只需执行以下操作:

echo implode($_POST['technologies'], ", ");