2015-04-04 4 views
2

Есть ли способ эффективно переписать это? СпасибоЛучший способ переписать эти предложения IF?

<?php if ($row['website']) { ?> 
    <li><a target="_blank" href="http://www.<?= $row['website']; ?>"><i class="icon icon_desktop"></i></a></li> 
<?php } ?> 
<?php if ($row['twitter']) { ?> 
    <li><a target="_blank" href="http://www.twitter.com/<?= $row['twitter']; ?>"><i class="icon social_twitter"></i></a></li> 
<?php } ?>      
<?php if ($row['facebook']) { ?> 
    <li><a target="_blank" href="http://www.facebook.com/<?= $row['facebook']; ?>"><i class="icon social_facebook"></i></a></li> 
<?php } ?> 
<?php if ($row['linkedin']) { ?> 
    <li><a target="_blank" href="http://www.linkedin.com/in/<?= $row['linkedin']; ?>"><i class="icon social_linkedin"></i></a></li> 
<?php } ?> 
<?php if ($row['youtube']) { ?> 
    <li><a target="_blank" href="http://www.youtube.com/user/<?= $row['youtube']; ?>"><i class="icon social_youtube"></i></a></li> 
<?php } ?> 
+0

Ну, в качестве первого шага вы можете исправить отступы кода, который вы указали выше :-) – arkascha

+0

Я надеюсь, что ваши данные в '$ row' дезинформированы или ваш сайт будет эксплуатироваться с помощью кода JavaScript или что-то в вашем ссылки. Вероятно, вы хотите использовать 'htmlspecialchars()'. Это также необходимо для таких символов, как '&'. А как насчет веб-сайтов, которые используют HTTPS или не начинаются с 'www.'? – Archimedix

ответ

3

Я думаю, что что-то, как это должно работать для вас:

(Здесь я просто поставить все ключи в массив, который я затем фильтр с array_filter() После этого вы можете просто пройдёмся по всем. отфильтрованные ключи)

<?php 

    $keys = ["http://www." => "website", "http://www.twitter.com/" => "twitter", "http://www.facebook.com/" => "facebook", "http://www.linkedin.com/in/"=> "linkedin", "http://www.youtube.com/user/"=> "youtube"]; 
    $keys = array_filter($keys, function($v)use($row){return $row[$v];}); 

    foreach($keys as $k => $key) 
     echo "<li><a target='_blank' href='" . $k . $row[$key] . "'><i class='icon icon_" . $key . "'></i></a></li>"; 

?> 

(за дополнительную плату) EDIT:

для ре Опль с версиями PHP под < 5.4 (echo phpversion();):
И потому, что мы живем в 2015 году, get the current version of PHP right here right now!

$keys = array("http://www." => "website", "http://www.twitter.com/" => "twitter", "http://www.facebook.com/" => "facebook", "http://www.linkedin.com/in/"=> "linkedin", "http://www.youtube.com/user/"=> "youtube"); 
function filter($v){global $row; return $row[$v];} 
$keys = array_filter($keys, "filter"); 

foreach($keys as $k => $key) 
    echo "<li><a target='_blank' href='" . $k . $row[$key] . "'><i class='icon icon_" . $key . "'></i></a></li>"; 

пример вывод:

<li><a target='_blank' href='http://www.twitter.com/a'><i class='icon icon_twitter'></i></a></li> 
<li><a target='_blank' href='http://www.linkedin.com/b'><i class='icon icon_linkedin'></i></a></li> 
<li><a target='_blank' href='http://www.youtube.com/c'><i class='icon icon_youtube'></i></a></li> 
+0

«Веб-сайт» немного отличается от остальных. – bloodyKnuckles

+0

@bloodyKnuckles Спасибо за уведомление, не видел. обновил ответ – Rizier123

+0

Спасибо за это, но я получил 'Parse error: синтаксическая ошибка, неожиданная '['' – EnexoOnoma

1

Конечно, не короче, но легче читать и поддерживать в моих глазах:

<?php 
foreach (array('website', 'twitter', 'facebook', 'linkedin', 'youtube') as $site) { 
    if ($row[$site]) { 
     switch($site) { 
      case 'website': 
       $urlBase = 'http://www.'; 
       $icon = 'icon_desktop'; 
       break; 
      case 'twitter': 
       $urlBase = 'http://www.twitter.com/'; 
       $icon = 'social_twitter'; 
       break; 
      case 'facebook': 
       $urlBase = 'http://www.facebook.com/'; 
       $icon = 'social_facebook'; 
       break; 
      case 'linkedin': 
       $urlBase = 'http://www.linkedin.com/in/'; 
       $icon = 'social_linkedin'; 
       break; 
      case 'youtube': 
       $urlBase = 'http://www.youtube.com/user/'; 
       $icon = 'social_youtube'; 
       break; 
     } 
     echo sprintf('<li><a target="_blank" href="%s%s"><i class="icon %s"></i></a></li>'."\n", $urlBase, $row[$site], $icon); 
    } 
} 
?> 

Часто явное лучше, чем подразумевается, когда дело доходит до надежности и ремонтопригодности.

Смежные вопросы