2010-11-10 1 views
0

Интересно, могу ли я сделать это проще. Он проверяет, имеет ли в нем ссылку $content. Если это произойдет, то он запускает JQuery $.getJson, чтобы получить миниатюру его и так ...Может ли это сделать foreach/if быть упрощенным?

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

$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 
    } 
} 

Или это хорошо?

+1

форматирования ужасно – Andrey

ответ

1

Я думаю, что самая грязная часть - это переключение контекста. Я хотел бы использовать интерполяцию строки, и только открыть один <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

Чтобы сделать что-то более чистое, вы можете сделать свой 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> 
0

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

$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

Я думаю, что делает его гораздо хуже ... – meagar

0

Это уже проще, если вы отформатируете его хорошо:

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>"; 
} 

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

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