我正试图在PHP中使用FOREACH循环,根据值在数组中的位置输出不同的消息。我的代码如下:
$qtyValidFiles = count($validFiles);
$tick = 0;
foreach($validFiles AS $validItem)
{
if($tick = 0)
{
echo"'#$validItem,";
}
elseif($tick < $qtyValidFiles -1 && $tick != 0)
{
echo"#$validItem,";
}
elseif($tick = $qtyValidFiles -1)
{
echo"#$validItem'";
}
}; $tick++;
在这种情况下,$qtyValidFiles
有4个值。
上面的代码返回:
#Games'#Movies'#Music'#TV'
这向我表明CCD_ 2总是被看作值CCD_。
如果$validFiles
是一个索引数组,您可以执行:
foreach ($validFiles as $tick => $validItem)
而不是自己递增CCD_ 5。
不过,你的整个循环是不必要的。你可以做:
echo "'" . implode(",", array_map(function($x) { return "#$x"; }, $validFiles)) . "'";
这应该比你的代码更好,因为如果数组正好有1个项,你就没有做正确的事情;您将打印开头的引号和逗号,但我认为您确实希望一个元素被引号包围。
$tick
始终是0
,因为$tick++;
在循环之外。把它向上移动一行。
同样在Rahul Kumar
状态下,使用==作为比较运算符。
或者就这样做,不需要循环:
echo '#' . implode(',#', $validFiles);
似乎与您的代码更简单、更正确的等价物是:
$qtyValidFiles = count($validFiles);
$str = '';
foreach($validFiles AS $validItem) {
$str .= "#$validItem,";
}
if (!empty($str)) {
echo "'" . substr($str, 0, -1) . "'"; //removes the last ","
}