2013-05-28 2 views
0

내 사이트의 검색 엔진을 구축 중입니다. 내 사이트의 페이지 및 위치에 포함 된 모든 단어의 색인이 있습니다. 나는 PHP는 배열을 사용하고, 그리고 검색 후 반환되는 정보는 다음과 같습니다다차원 배열을 교차하는 방법

'jeff' => 
    array 
     1 => 
     array 
      0 => int 0 
      1 => int 259 
      2 => int 444 
      3 => int 461 
      4 => int 486 
'seka' 
    array 
     1 => 
     array 
      0 => int 1 
      1 => int 260 
      2 => int 445 
      3 => int 462 
      4 => int 487 

난 제프의 모든 게시물 목록을 찾으려면, 내가 키로 "제프"를 찾습니다; 그것이 존재한다면, 나는 그것을 $v=index['jeff']과 같은 변수에 삽입합니다.

간단하지만 이제는 "jeff and seka"와 같은 다중 문자열 쿼리를 사용하면 어떻게됩니까? 어떻게하면 둘 다 존재하는지 확인하고 서로 다른 배열 (하나는 jeff 용, 다른 하나는 seka 용)로 반환하므로 두 문자열을 모두 사용하여 문서를 쉽게 찾을 수 있습니다.

+1

빠른 방법 중 하나는 다른 변수에 필요한 값을 반환하는 것입니다. – tuxnani

+0

querry 문자열이 두 단어 이상인 경우 다섯 단어를 말하면 결과를 귀중품으로 가져 오는 방법을 지정할 수 있습니까? – user2075354

+0

내가 잘못하지 않았다면 그 숫자는 단어가있는 페이지 ID입니다. 사실 그들은 위치 배열 (int의 배열)을 가리 킵니다. 예제가 실제로 이해할 수는 없지만 다음과 같이 나타납니다. D –

답변

1

편집 : 댓글 후 다시 쓰십시오. 우리가 올바른 방향으로 가고 있는지보기 위해 어떤 피드백이 좋을 것입니다!

array_intersect_key() 기능을 보았습니까? 당신은 할 수 있어야한다 :

$common = array_intersect_key(index['jeff'], index['seka']); 

이 제프와 세카에 공통적으로 해당 페이지의 ('제프'에서와 값) 단지 키 당신에게 새로운 배열을 줄 것이다. 함수에 추가 배열을 여러 개 제공 할 수 있습니다. 예를 들어 5 개의 다른 용어를 함께 검색하고 모두 5 개를 포함하는 페이지 만 검색 할 수 있습니다.

반환 배열에는 각 페이지에 대한 키가 포함됩니다. 각 키의 값은 array_intersect_key() 호출의 첫 번째 인수에서 가져옵니다 (이 예에서는 "jeff"). 즉, index['jeff'] 배열의 하위 집합이 반환됩니다.

각 페이지에서 다른 용어의 위치를 ​​검색하려면 처음에는 다른 용어로 검색을 반복하십시오 (매우 비효율적이지 않음) 또는 반환 된 결과의 키를 반복 할 수 있습니다 $pages = array_keys($common);으로 키의 배열을 가져와) 이것을 다른 용어 각각에 대한 배열의 인덱스와 같이 사용하십시오.

+0

괜찮 았을 지 모르겠지만 설명은 분명하지 않지만 사이트 검색 엔진을 구축하고 있으며이 시점에서 사이트 내의 모든 단어에 대한 색인을 작성했습니다. jeff와 seke의 예는 페이지에서 추출 된 단어이고 번호가 지정된 배열은 해당 단어가있는 페이지의 ID이고 마지막 숫자 값은 페이지의 단어 위치입니다. – user2075354

+0

OP는 "AND"비교를 요구 했으므로 교차로는 이미 필요한 정보 (검색시 -all- 용어가 포함 된 페이지)를 이미 제공합니다. 이렇게하면 사용자가 제출 한 검색 결과로 해당 페이지에 대한 링크 목록을 제공 할 수 있습니다. 다른 용어의 위치를 ​​검색하려면 다른 단어 배열의 키를 반복하여 위치 번호를 검색한다는 아이디어를지지합니다. –

+0

@ Erenor : 나는 "AND"결과를 얻었고, OP는 또한 jeff와 seka가 "결과가 나왔던"결과의 일부로 "다른 배열"을 원했습니다.하지만 내가 원했던 바를 정확히 추측했을 수도 있습니다.). 나는 왜 그가 모든 검색 단어가 나오는 페이지가 필요한지에 대한 평가에 전적으로 동의합니다 (나는 전에 "검색 엔진"이라는 용어를 사용했습니다) ... 내가 뭔가를 놓친다 고 제안하고 있습니까? 그렇다면, 무엇? –

관련 문제