2016-10-18 3 views
1

Ich verwende eine if elseif Bedingung innerhalb der Foreach-Schleife. Sowohl if als auch elseif rufen zwei verschiedene Funktionen auf und rufen den Wert desselben Arrays $nice[] ab. Wenn ich den folgenden Code ausführen, funktioniert nur die if Bedingung.Wenn andere Bedingung innerhalb foreach mit Array

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

Die aktuelle Ausgabe ist:

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

Es in keinen Wert [1] Position befindet.

+0

erste Vermutung wäre, dass getVimeoId null, falsche oder ähnliches gibt. Bitte überprüfen Sie diese Methode auf Fehler und/oder stellen Sie ihren Code zur Verfügung, damit wir einen Blick darauf werfen können. –

+0

Es könnte nützlich sein zu sehen, was die beiden Funktionen tun. Wie es diese Funktionen sind, die tun, was auch immer richtig oder falsch gemacht wird. ** Denkst du nicht ** – RiggsFolly

+0

@FranzGeichmann hat den Code aktualisiert. – Shihas

Antwort

-1

Erste-off, Ihre if() Klausel auf dem Hauptarray prüft $youtube anstelle des Wertes: $url. Vielleicht
, hilft das Snippet unten:

$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

arbeiten perfekt maahn ... Vielen Dank. Du sparst meinen Tag :) – Shihas

Verwandte Themen