2013-12-07 2 views
0

вот мой вопрос:Использование если/иначе оператор в PHP код

У меня есть код folwing в моем проекте:

$news = "Article 20.part2"; 

if(strpos($news,'.part1')) {$news_n = ".part1";} 
else if(strpos($news,'.part2')) {$news_n = ".part2";} 
else if(strpos($news,'.part3')) {$news_n = ".part3";} 
else if(strpos($news,'.part4')) {$news_n = ".part4";} 
else if(strpos($news,'.part5')) {$news_n = ".part5";} 

echo $news; 
echo "Part number:" . $news_n . "- <a href=\"#\">Read more</a>"; 

Что я хочу, чтобы отобразить количество новостей части, но проблема в том, что есть статьи с + 20/+ 30 частями, и я не хочу добавлять

else if(strpos($news,'.part20')) {$news_n = ".part20";} 

и т. д. моему коду.

Есть ли более простой способ сделать это?

Заранее благодарим за вашу помощь!

ответ

1

Может быть что-то вроде:

for($i=1;$i<100;$i++) 
{ 
    if(strpos($news,'.part'.$i)) 
     $news_n = '.part'.$i; 
} 
+0

Работал как шарм! Благодаря! – VDonchev

0

Если строка, которую вы ищете пронумерован на основе, как вы говорите в своем вопросе вы можете сделать:

foreach(range(1, 50) as $i) { 
    $part = sprintf('.part%d', $i); 
    if(strpos($news, $part) { 
     $news_n = sprintf('.%s', $part); 
    } 
} 
2

вы можете использовать PHP preg_match для этого

$news = "Article 20.part20"; 
$matches= array(); 
if (preg_match("/\.part(\d*)/", $news,$matches)){ 
    $news_n = '.part'. $matches[1]; 
} 

echo $news; 
echo "Part number:" . $news_n . "- <a href=\"#\">Read more</a>"; 

Редактировать: Вы также можете использовать $new_n = $matches[0];. $matches[0] дает вам полный матч, а $matches[1] будет содержать номер.

Редактировать2: Если .part является последним, то вы можете использовать намного проще strstr.

$news = "Article 20.part20"; 
$news_n = strstr($news, ".part"); 
echo $news; 
echo "Part number:" . $news_n . "- <a href=\"#\">Read more</a>"; 
+0

Это лучшее решение, но, возможно, ему нужно подумать о циклах, прежде чем перейти в regexp – mcuadros

1

Используйте регулярное выражение

$matches=[]; 
if (preg_match_all('.part\[(^[0-9]{1,3}$)\]/', $news, $matches)) { 
print_r($matches); 
} 
Смежные вопросы