2011-07-28 8 views
0

PHP. 나는 $ article, $ quotes, $ links와 같이 각각 50 개의 항목으로 채워진 세 개의 배열을 가지고있다. 각 배열의 각 항목에는 내용과 날짜가 있습니다.중요도를 가중치로 사용하여 배열을 하나의 배열로 정렬

목표는 배열 유형의 중요도에 따라 가중치를 부여한 하나의 배열을 날짜순으로 (가장 오래된 것부터 가장 오래된 것으로) 정렬하여 생성하는 것입니다. 예를 들어, 항상 따옴표보다 많은 기사를 표시하고 링크보다 따옴표를 더 많이 표시해야합니다. 예 :

기사, 기사, 기사, 견적, 기사, 링크, 기사, 기사, 견적, 기사, 기사, 견적, 기사, 링크.

이 작업을 수행하는 간단한 방법이 있습니까? 감사!

+0

기사, 시세 및 링크 배열은 이미 날짜순으로 정렬되어 있습니까? – GWW

+0

예, 날짜순으로 정렬됩니다. –

답변

1

당신은 모드 조작을 활용할 수 있습니다.

$result = array(); 
$i = 0; 
$count = 0; 
while(true) { 
    $i++; 

    $result[] = array_pop($articles); 
    if (++$count >= 50) break; // 50 items is enough 

    if ($i % 3 == 0) { // one quote every 3 articles 
     $result[] = array_pop($quotes); 
     if (++$count >= 50) break; 
    } 

    if ($i % 5 == 0) // one link every 5 articles 
     $result[] = array_pop($links); 
     if (++$count >= 50) break; 
    } 
} 
0
  • 날짜에 세 개의 배열을 각각 정렬 한 다음 (날짜, 중요도)를 기준으로 수동 병합 정렬을 수행 할 수 있습니다. 병합 정렬 전에 3 개의 배열을 하나의 배열에 넣고 일반적인 병합 정렬을 작성하면 나중에 시스템에 새 유형을 쉽게 추가 할 수 있습니다.
  • 중요도를 표시하고 각 레코드를 병합 한 후 각 레코드에 사용자 지정 필드를 추가 한 다음 (날짜, 중요도)를 기반으로하는 사용자 지정 비교를 사용하여 기본 제공 정렬을 사용할 수 있습니다. 이것을 구현하는 것은 매우 쉽습니다.

는 엄 있습니다 .. misundertanding 죄송합니다, 나는 당신이 날짜를 기준으로 요소를 정렬 할 생각하고 그 중요도에 따라 동일한의 경우 :/

관련 문제