2012-04-16 4 views
2

기본적으로 비디오 스트림을 가져 와서 뷰어 카운트별로 구성하여 가장 많은 뷰가있는 페이지를 페이지 상단에 배치하는 페이지를 만들려고합니다.동일 케이스가있는 스위치

저는 PHP에 상당히 익숙합니다. 그래서 내가 한 방법은 극도로 비효율적이며 오래지만 중요한 것은 중첩 된 스위치를 사용한다는 것입니다.

모든 동영상의 시청자 수가 0 이상일 때 완벽하게 작동합니다. 두 개의 동영상에 동일한 시청자가있는 경우 문제가 발생합니다. 이 경우 모든 스트림이 원래 순서대로 유지됩니다.

다음은 문제를 일으키는 코드 조각을 제거한 것입니다. 그것이 올바른 순서로 시청자 번호 목록을 생성하도록

$viewarray = array($viewers1, $viewers2, $viewers3, $viewers4); 

rsort($viewarray, SORT_NUMERIC); 

for ($z=0; $z<=3; $z++) 
{ 
if ($viewarray[$z] == 0) {break;} 
switch($viewarray[$z]) 
{ 
    case $viewers1: 
     switch($z) 
     { 
      case 0: 
       //code which implements the re-ordering 
      case 1: 
      case 2: 
      case 3: 
     } 
     break; 
    case $viewers2: 
     switch($z) 
     { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
     } 
     break; 
    case $viewers3: 
     switch($z) 
     { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
     } 
     break; 
    case $viewers4: 
     switch($z) 
     { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
     } 
     break;  
} 
} 

$viewarray

가 정렬됩니다. 그런 다음 스위치는 각 스트림의 실제 시청자 수와 일치하는 수를 확인하여 일치하는 수를 찾습니다.

나는 switch 인수가 2 번째의 경우와 일치하면 첫 번째 것을 선택 하겠지만 슬프게도 그렇지 않다고 생각했다. 나는 그것을 if 문으로 대체하려고했지만 똑같은 일이 일어난다.

도움을 주시면 감사하겠습니다.

답변

1

whoa whoa whoa. 이 모든 걸 고쳐라. 당신이해야 할 일은 좀 더 비슷합니다. 각 스트림에는 데이터베이스 레코드가 있어야합니다. 누군가 스트림을 볼 때마다 데이터베이스 레코드의 열이 뷰 카운터로 증가되어야합니다. 그런 다음 데이터베이스 테이블의이 열에 인덱스를 추가하고 데이터베이스의 스트림을 가져 와서 나열하면 SQL 쿼리의 뷰 수만큼 정렬 할 수 있습니다. ORDER BY viewCounter

+0

앞으로도이 방법을 사용하여보다 효율적으로 만들 수 있지만 현재는 PHP 만 사용하고 있습니다. –

0

편집 : 올바른 순서로 비디오를 가져올 수없는 경우에만 이렇게하십시오!

관련 배열을 다음과 같이 만들면 어떨까요 : array($video2 => $viewers1, $video2 => $viewers2) 다음 값으로 정렬 할 수 있습니다. 그런 다음 arsort()을 사용하고 배열에서 비디오 키를 읽으면 재주문을 처리 할 수 ​​있습니다.

+0

그것은 작동 할 수있는 것 같지만 arsort() 사용에 문제가 있습니다. 만약 내가 그것을 사용하는 다음 그들은 여전히 ​​원래의 순서로 될 자신의 키를 다시 배열을 호출하려고합니다. 올바른 순서로 가져올 수있는 유일한 방법은 foreach 루프를 사용하는 http://php.net/manual/en/function.arsort.php의 예제를 사용하는 것입니다. 주문을 영구적으로 처리 할 수 ​​있다면 색인으로 전환 할 수 있지만 작동하지 않을 수 있습니다. –