Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 加入“;及;在foreach循环中最后两个数据库结果之间_Php_Mysql_Laravel 5.4 - Fatal编程技术网

Php 加入“;及;在foreach循环中最后两个数据库结果之间

Php 加入“;及;在foreach循环中最后两个数据库结果之间,php,mysql,laravel-5.4,Php,Mysql,Laravel 5.4,我想在最后两个MySQL结果之间添加“and”一词。我可以添加逗号,但我需要在前两个之间添加逗号,然后在后两个之间添加“and” 以下是我正在使用的代码: $not_first = false; foreach($solos as $solo) { if ($not_first) { echo ', '; } $not_

我想在最后两个MySQL结果之间添加“and”一词。我可以添加逗号,但我需要在前两个之间添加逗号,然后在后两个之间添加“and”

以下是我正在使用的代码:

        $not_first = false;

        foreach($solos as $solo)
        {
            if ($not_first)
            {
                echo ', ';
            }
            $not_first = true;

            echo $solo->id;
        }
我可以用“and”代替逗号。但如果我有3个或更多的结果,它会说“结果和结果,结果和结果”。我想让它说“结果,结果,结果,结果”

有什么想法吗?

尝试使用下一个想法

if (count($solos) > 2) {
    $last = array_pop($solos);
    echo implode(', ', $solos) . ' and ' . $last;
}
else
{
    echo implode(' and ', $solos);
}
或者使用以下命令:

   $i = 1;
   $last = count($solos);
    foreach($solos as $solo)
    {
        if ($i > 1 && $i != $last)
        {
            echo ', ';
        }
        elseif ( $i == $last )
        {
            echo ' and ';
        }

        echo $solo->id;
        $i++;
    }

您可以计算它,并在最后一个id附加“和”而不是“,”


其他答案都很有效。为了完整起见,还可以使用preg_replace插入“and”

$solos = array( 'one', 'two', 'three', 'four' );

$result = implode(', ',$solos);
$result = preg_replace('/, ([^,]+)$/',', and \1', $result);

在100多万次迭代中,mnv的array_pop方法耗时2.13秒。preg_更换在3.65秒内完成。最好使用array_pop

在这种情况下,我更喜欢使用
for
而不是
foreach

for($i=0; $i<count($solos); $i++){
    echo $solos[$i]->id;

    if($i == count($solos) - 2){        // --> second last element, implies "and" 
        echo " and ";
    }
    else{
        if($i != count($solos) - 1){    // --> "," for all other elements, except last
            echo ", ";
        }    
    }
}
$i=0;$iid; if($i==count($solos)-2{/-->倒数第二个元素,表示“and” 呼应“和”; } 否则{ 如果($i!=count($solos)-1){/-->“,”表示除最后一个之外的所有其他元素 回声“,”; } } }
for($i=0; $i<count($solos); $i++){
    echo $solos[$i]->id;

    if($i == count($solos) - 2){        // --> second last element, implies "and" 
        echo " and ";
    }
    else{
        if($i != count($solos) - 1){    // --> "," for all other elements, except last
            echo ", ";
        }    
    }
}