【发布时间】:2016-10-18 12:05:13
【问题描述】:
我在 foreach 循环中使用了if elseif 条件。在if 和elseif 内部,两个不同的函数正在调用和检索相同数组$nice[] 的值。如果我运行以下代码,则只有 if 条件有效。
$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] 位置没有值。
【问题讨论】:
-
第一个猜测是 getVimeoId 返回 null、false 或类似的值。请检查该方法是否有错误和/或提供其代码,以便我们查看。
-
看看这两个函数的作用可能会有用。因为正是那些功能正在做正确或错误的事情。 你不觉得
-
@FranzGleichmann 更新了代码。
-
一点代码缩进会让我们更容易阅读你的代码,但更重要的是你更容易调试
-
将
if(preg_grep("/youtu/i", $youtube))替换为if (stripos($url, "youtu") !== false)之类的内容或查看您得到的答案。
标签: php arrays function if-statement foreach