2013-09-14 4 views
0

Я использую этот скрипт, чтобы перечислить несколько потоков Twitch.tv и их статус (офлайн или онлайн).PHP, перечисляя вещи дважды

Если сетевых потоков нет, я хочу, чтобы он отображал текст, говорящий, что все они не подключены.

код, который проверяет, является ли добавленные потоки онлайн:

//get's member names from stream url's and checks for online members 
$channels = array(); 

for ($i = 0; $i < count($members); $i++) { 
if (isset($json_array[$i])){ 
$title = $json_array[$i]['channel']['channel_url']; 
$array = explode('/', $title); 
$member = end($array); 
$viewer = $json_array[$i] ['stream_count']; 
onlinecheck($member, $viewer); 
$checkedOnline[] = signin($member); 
} 
} 

unset($value); 
unset($i); 

//checks if player streams are online 
function onlinecheck($online, $viewers) 
{ 
//If the variable online is not equal to null, there is a good change this person is currently streaming 
if ($online != null) 
{ 
echo '<a href="http://www.twitch.tv/'.$online.'"> <strong>'.$online.'</strong></a>'; 
echo '&nbsp <img src="/images/online.png"><strong> Status:</strong> Online! </br>'; 
echo '<img src="/images/viewers.png"><strong>Viewers:</strong> &nbsp' .$viewers.'</br>'; 

} 
} 

Полный код:

<html> 
<head> 
<title>Streamlist</title> 
</head> 
<body> 
<?php 

$members = array("ncl_tv"); 

$userGrab = "http://api.justin.tv/api/stream/list.json?channel="; 

$checkedOnline = array(); 

foreach($members as $i =>$value){ 
$userGrab .= ","; 
$userGrab .= $value; 
} 

unset($value); 

$json_file = file_get_contents($userGrab, 0, null, null); 
$json_array = json_decode($json_file, true); 

$channels = array(); 

for ($i = 0; $i < count($members); $i++) { 
if (isset($json_array[$i])){ 
$title = $json_array[$i]['channel']['channel_url']; 
$array = explode('/', $title); 
$member = end($array); 
$viewer = $json_array[$i] ['stream_count']; 
onlinecheck($member, $viewer); 
$checkedOnline[] = signin($member); 
} 
} 

unset($value); 
unset($i); 

function onlinecheck($online, $viewers) { 
if ($online != null) { 
echo '<a href="http://www.twitch.tv/'.$online.'"> <strong>'.$online.'</strong></a>'; 
echo '&nbsp <img src="/images/online.png"><strong> Status:</strong> Online! </br>'; 
echo '<img src="/images/viewers.png"><strong>Viewers:</strong> &nbsp' .$viewers.'</br>';   
} 
} 

$alloffline = "All female user streams are currently offline."; 

function signin($person){ 
if($person != null){ 
return $person; 
} 

?> 

</body> 
</html> 

................... .................................................. .................................................. .................................................. ...

+0

возможно дубликат [ошибка PHP, Undefined смещение и Undefined переменной] (http://stackoverflow.com/questions/18803713/php-error-undefined-offset -undefined-variable) – kero

+0

Я думаю, проблема в '$ member = end ($ array);', там вы получаете элемент массива, а 'foreach' нужен массив для аргумента. [read end()] (http://php.net/manual/en/function.end.php) –

+0

Повторите мой пост, отредактировав его сейчас. Я исправил ошибку foreach, однако он все еще отображает вещи дважды. –

ответ

1

Это потому, что ваш URL-адрес $userGrab содержит имена пользователей дважды? Это URL, содержимое которого вы извлечения:

http://api.justin.tv/api/stream/list.json?channel=painuser,ZombieGrub,Nathanias,Youbetterknowme,ncl_tv,painuser,ZombieGrub,Nathanias,Youbetterknowme,ncl_tv

Взглянув на ответ, это не похоже, что это вызывает проблему. Странный URL-адрес является результатом добавления в строку $userGrab в первом цикле foreach после того, как вы уже добавили их с вызовом функции implode(). Я думаю, что twitch.tv правильно игнорирует повторяющиеся каналы.

Если все значения в $checkedOnline являются нулевыми, все в автономном режиме. Поместите это в конце первого образца кода:

$personOnline = false; 

foreach($checkedOnline as $person) { 
    if($person !== null) { 
     $personOnline = true; 
     break; 
    } 
} 

if(!$personOnline) { 
    echo 'No one is online'; 
} 
else { 
    //there is at least someone online 
} 
+0

Хм, этого не замечал. Это должно быть так, но как я могу это исправить? Как я уже сказал в конце своего сообщения, я действительно плохо разбираюсь в этом. :( –

+0

Ну, после удаления вызова implode(), он все тот же. Все еще перечисляйте вещи дважды. –

+0

Какой желаемый результат? В вашем последнем 'foreach' вы выводите как' Online', так и 'Offline' - вам не хватает инструкции 'if'? –

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