2017-04-15 56 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 ", "; 
     }  
    } 
}