Можно ли это foreach /, если быть упрощенным? - PullRequest
0 голосов
/ 10 ноября 2010

Интересно, могу ли я сделать это проще? Он проверяет, есть ли в $content ссылка на YouTube. Если это так, тогда он запускает jQuery $.getJson, чтобы получить его миниатюру, и так ...

Но я нашел это очень неаккуратным, сделанным мной, но как еще это должно быть закодировано:

$isY = preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $content, $matches);

if($isY) {
  foreach(array_unique($matches) as $m) {
  ?>
    <script>
      $.getJSON (
        'http://gdata.youtube.com/feeds/api/videos/<?php echo $m; ?>?v=2&alt=json-in-script&callback=?',
        function(data) {
          youtubeFetchDataCallback(data, <?php echo $show['id']; ?>);
        }
      );
    </script>
  <?php
  }
}

Или это нормально?

Ответы [ 4 ]

1 голос
/ 10 ноября 2010

Я думаю, что самая грязная часть - это переключение контекста. Я бы использовал интерполяцию строк и открыл только один тег <script>:

<?php
if (preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $content, $matches)) {
  echo '<script type="text/javascript">';

  foreach(array_unique($matches) as $m) {
    echo "
      $.getJSON (
        'http://gdata.youtube.com/feeds/api/videos/$m?v=2&alt=json-in-script&callback=?',
        function(data) {
          youtubeFetchDataCallback(data, $show[id]);
        }
      );
    ";
  }

  echo '</script>';
}
0 голосов
/ 10 ноября 2010

Вы можете сделать это вместо этого ... немного чище:

$string = "#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#";
        if(preg_match($string, $content, $matches);):
            foreach(array_unique($matches) as $m):
            ?>
            <script>
$.getJSON( 'http://gdata.youtube.com/feeds/api/videos/<?php echo $m; ?>?v=2&alt=json-in-script&callback=?', function(data) { 
youtubeFetchDataCallback(data, <?php echo $show['id']; ?>);
} );
            </script>
            <?php
            endforeach;
        endif;
0 голосов
/ 10 ноября 2010

Уже проще, если красиво отформатировать:

if($isY){
    echo "<script>";

    foreach(array_unique($matches) as $m){
        echo "$.getJSON('http://gdata.youtube.com/feeds/api/videos/{$m}v=2&alt=json-in-    script&callback=?', function(data) { 
youtubeFetchDataCallback(data,{$show['id']});";
        echo "} );";
    }

    echo "</script>";
}

Вы правы, что не используете регулярное выражение для этого. Код в порядке (не нужно повторять скрипт-тег, хотя) - стремитесь к удобству обслуживания.

0 голосов
/ 10 ноября 2010

Чтобы иметь что-то более чистое, вы можете заставить свой php-код написать массив javascript, а затем в javascript вы можете перебрать этот массив и получить все миниатюры.

Если будет лучше, чем эти кратные <script>....</script>

Что-то вроде (не проверено):

<script type="text/javascript">
var Videos = new Array(
<?
if($isY)
    foreach(array_unique($matches) as $m)
        echo '"'.$m.'",'
?>
);
for (v in Videos)
    $.getJSON( 'http://gdata.youtube.com/feeds/api/videos/'+v+'?v=2&alt=json-in-script&callback=?', function(data) { 
youtubeFetchDataCallback(data, <?php echo $show['id']; ?>);
} );
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...