2016-10-18 4 views
1

の場合foreachループ内でif elseifという条件を使用しています。 ifelseifの内部では、2つの異なる関数が呼び出して同じ配列$nice[]に値を取得しています。次のコードを実行すると、if状態だけが動作しています。foreach内のelseif条件が配列

$youtube = array(
      'https://www.youtube.com/watch?v=nCwRJUg3tcQ1&list=PLv5BUbwWA5RYaM6E-QiE8WxoKwyBnozV2&index=4', 
      'http://vimeo.com/channels/vimeogirls/87973054123', 
      'http://www.youtube.com/watch?v=nCwRJUg3tcQ2&feature=relate', 
      'http://youtube.com/v/nCwRJUg3tcQ3?feature=youtube_gdata_player'); 

$nice = array(); 

foreach ($youtube as $url) { 
    if(preg_grep("/youtu/i", $youtube)){ 
     $nice[] = getYoutubeId($url); 
    }elseif(preg_grep("/vimeo/i", $youtube)){ 
     $nice[] = getVimeoId($url); 
    } 
} 

print_r($nice); 

function getVimeoId($url) 
{ 
    if (preg_match('#(?:https?://)?(?:www.)?(?:player.)?vimeo.com/(?:[a-z]*/)*([0-9]{6,11})[?]?.*#', $url, $m)) { 
     return 'v_'.$m[1]; 
    } 
    return false; 
} 

function getYoutubeId($url) 
{ 
    $parts = parse_url($url); 
    if (isset($parts['host'])) { 
     $host = $parts['host']; 
     if (false === strpos($host, 'youtube') && 
      false === strpos($host, 'youtu.be') 
      ) 
     { 
      return false; 
     } 
    } 
    if (isset($parts['query'])) { 
     parse_str($parts['query'], $qs); 
     if (isset($qs['v'])) { 
      return 'y_'.$qs['v']; 
     } 
     else if (isset($qs['vi'])) { 
      return 'y_'.$qs['vi']; 
     } 
    } 
    if (isset($parts['path'])) { 
     $path = explode('/', trim($parts['path'], '/')); 
     return 'y_'.$path[count($path) - 1]; 
    } 
    return false; 
} 

電流出力は次のようになります。

Array ( 
     [0] => y_nCwRJUg3tcQ1 
     [1] => 
     [2] => y_nCwRJUg3tcQ2 
     [3] => y_nCwRJUg3tcQ3 
    ) 

[1]位置には値がありません。 $url

+0

最初の推測がgetVimeoIdは、ヌル虚偽または類似し返すことになります。その方法でエラーをチェックしたり、コードを提供したりしてください。 –

+0

2つの関数が何をしているのか分かります。それは、正しく行われているか何が悪いことをしているものでもあります。 **あなたはそう思わない** – RiggsFolly

+0

@FranzGleichmannがコードを更新しました。 – Shihas

答えて

-1

まずオフは、あなたのif()句は、メインアレイ$youtube代わりの値をチェックしています。
おそらく、以下のスニペットは役立ちます:

$youtube = array(
     'https://www.youtube.com/watch?v=nCwRJUg3tcQ1&list=PLv5BUbwWA5RYaM6E-QiE8WxoKwyBnozV2&index=4', 
     'http://vimeo.com/channels/vimeogirls/87973054123', 
     'http://www.youtube.com/watch?v=nCwRJUg3tcQ2&feature=relate', 
     'http://youtube.com/v/nCwRJUg3tcQ3?feature=youtube_gdata_player'); 

    $nice = array(); 

    foreach ($youtube as $url) { 
     if(preg_match("#youtu#i", $url)){ 
      $nice[] = getYoutubeId($url); 
     }elseif(preg_match("#vimeo#i", $url)){ 
      $nice[] = getVimeoId($url); 
     } 
    } 
+0

完璧に動作しています...ありがとうございます。あなたは私の日を保存:) – Shihas