2017-04-15 20 views
3

我想在最后两个MySQL结果之间添加单词“和”。我可以添加逗号,但我需要在第一个逗号之间加上逗号,然后在最后两个之间加上“和”。在foreach循环的最后两个数据库结果之间添加“and”

这里是我使用的代码:

 $not_first = false; 

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

      echo $solo->id; 
     } 

我可以回声“和”,而不是逗号。但是,如果我有3个或更多的结果,它会说“结果和结果,结果和结果”。我希望它说“结果,结果,结果和结果”。

任何想法?

回答

3

尝试使用下一个想法

if (count($solos) > 2) { 
    $last = array_pop($solos); 
    echo implode(', ', $solos) . ' and ' . $last; 
} 
else 
{ 
    echo implode(' and ', $solos); 
} 
0

或者使用:

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

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

你可以指望它,并在倒数第二个ID追加 “和” 不是 “”

$x = count($solos); 
foreach($solos as $solo){ 
    echo $solo->id; 
    if ($solos[$x - 2] == $solo){ 
     echo 'and'; 
    }elseif ($solos[$x -1] != $solo && $solos[0] != $solo){ 
     echo ',' 
    } 
} 
0

其他答案完美工作。为了完整起见,您还可以使用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_replace在3.65秒内完成。使用array_pop会更好。

1

我宁愿在这种情况下使用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 ", "; 
     }  
    } 
}