这个foreach /如果简化了吗?

时间:2010-11-10 18:21:28

标签: php foreach

我想知道我能不能做到这一点。它会检查$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 个答案:

答案 0 :(得分: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>';
}

答案 1 :(得分: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>

答案 2 :(得分: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;

答案 3 :(得分: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>";
}

你没有使用正则表达式是正确的。代码没问题(不需要重复脚本标记) - 目标是可维护性。