2013-07-28 5 views
0

3 가지 검색 엔진에서 URL, 제목, 발췌 문장 및 점수를 반환하는 배열이 3 개 있습니다. 배열의 요소에 대해 점수가 100에서 시작되고 두 번째 99에서부터 시작됩니다. 3을 모두 하나의 배열로 결합하려고합니다. URL이 다른 배열에서 일치하는 경우 점수를 함께 추가 한 다음 중복 된 URL을 삭제하려고합니다. URL 사이에 일치하는 것이 없으면이 요소를 조합 된 배열에 넣기 만하면됩니다. 최종 결합 된 목록이 점수, 제목과 조각의 모든 고유 한 URL을 포함해야합니다, 여기 내 배열 구조는여러 배열에서 순위 목록 만들기

googleArray

$x=0; 
$score=100; 
foreach ($js->items as $item) 
    { 
     $googleArray[$x]['link'] = ($item->{'link'}); 
     $googleArray[$x]['title'] = ($item->{'title'}); 
     $googleArray[$x]['snippet'] = ($item->{'snippet'}); 
     $googleArray[$x]['score'] = $score--; 
     $x++; 
    } 

blekkoArray

$score = 100; 
foreach ($js->RESULT as $item) 
{   
$blekkoArray[$i]['url'] = ($item->{'url'});   
$blekkoArray[$i]['title'] = ($item->{'url_title'}); 
$blekkoArray[$i]['snippet'] = ($item->{'snippet'}); 
$blekkoArray[$i]['score'] = $score--;  // assign the $score value here 
$i++; 

} 

bingArray

foreach($jsonObj->d->results as $value) 
    { $i = 0; 

     $bingArray[]['Url'] = ($value->{'Url'});    
     $bingArray[]['Title'] = ($value->{'Title'}); 
     $bingArray[]['Description'] = ($value->{'Description'}); 
     $bingArray[]['score'] = $score--; 
     $i++; 
    } 
있습니다

도움이 될 것입니다, 미리 감사드립니다

+0

$ i는 bingArray에서 쓸모가 없습니다. 또한 왜 다른 배열에 다른 이름을 가지고 있습니까 : 링크, URL, URL? 문제 해결이 복잡해집니다. – user4035

+0

링크, url 및 Url은 다른 검색 엔진이 배열에 넣는 이름입니다. 그렇지만 배열의 할당을 변경할 수는 있지만 내 문제는 최소가됩니다. – user2622398

+0

예, 모든 배열이 동일하면 더 좋을 것입니다. 솔루션을 통합하기위한 유사한 데이터의 키 이름 – user4035

답변

0

이 솔루션은 작동하는 몇 가지 사항에 따라 다릅니다. 먼저 urlscore 키가 동일해야합니다. 즉 모든 소문자와 '링크'가 없습니다. 둘째, 배열의 키 역할을하기 때문에 URL을 정규화해야합니다. URL에 차이가있는 경우 최종 배열에 두 번 이상 표시됩니다. 이 줄을 추가 키로 URL을 유지하지 않으려면

$merged = array_merge($googleArray, $blekkoArray); 
$merged = array_merge($merged, $bingArray); 
$combined = array(); 
foreach ($merged as $key => $value){ 
    $score = (isset($combined[$value['url']]['score'])) ? $value['score'] + $combined[$value['url']]['score'] : $value['score']; 
    $combined[$value['url']] = $value; 
    $combined[$value['url']]['score'] = $score; 
} 

: 당신이 점수에 의해 배열을 정렬 할 경우

$combined = array_values($combined); 

을, 당신은 usort 사용할 수 있습니다

usort($combined, function ($a, $b){ 
    return $b['score'] - $a['score']; 
}); 
print_r($combined); 
+0

배열을 정렬하기위한 코드가 업데이트되었습니다. –