2013-08-27 8 views
0

MySQL 데이터베이스의 특정 단어가 포함 된 배열이 있는데이 배열은 텍스트 줄의 단어와 일치합니다. 텍스트는 말하자면 20 줄입니다. 배열은 데이터베이스의 각 단어 위치를 저장하며이 단어 중 일부는 데이터베이스의 다른 단어와 "관련"있으며 배열에도 저장됩니다. 그것은 조금 다음과 같습니다다중 배열 PHP 배열의 특정 요소를 동일한 배열의 특정 다른 요소와 비교해야합니다.

$words = array(
    ["Line0"] => array (
     ["Word0"] => array( 
      ["Name"] => "RandomWord", 
      ["DatabasePos"] => 15, 
      ["RelationsInDatabase"] => array (
       89, //So this is clearly the same database pos as Word1 on Line0. 
       27, //let's assume there's a word on line15 that has this database pos 
       ) 
      ), 
     ["Word1"] => array (
      ["Name"] => "SomeOtherRandomWord", 
      ["DatabasePos"] => 89, 
      ["RelationsInDatabase"] => array (
       NULL 
       ) 
      ) 
     ), 
    ["Line1"] => array (
     ["Word0"] => .... , 
     .. 
     ... 
     ... 
    ) 
); 

나는이 배열을 반복하고, 다른 단어와 관련된 단어를 찾으려면

. 그런 다음 어떤 배열과 어떤 줄과 어떤 단어가 관련되어 있는지를 추가하십시오. 예를 들어 :

$words = array(
    ["Line0"] => array (
     ["Word0"] => array( 
      ["Name"] => "RandomWord", 
      ["DatabasePos"] => 15, 
      ["RelationsInDatabase"] => array (
       89, //So this is clearly the same database pos as Word1 on Line0. 
       27, //let's assume there's a word on line15 that has this database pos 
       ), 
      ["RelationsInLinesOfText"] => array (//I want to loop through and add this element to the array. 
       [0] => array("Line0", "Word1"), 
       [1] => array("Line15", "Word3") 
       ) 
      ), 
     ["Word1"] => array (
      ["Name"] => "SomeOtherRandomWord", 
      ["DatabasePos"] => 89, 
      ["RelationsInDatabase"] => array (
       NULL 
       ) 
      ) 
     ), 
    ["Line1"] => array (
     ["Word0"] => .... , 
     .. 
     ... 
     ... 
    ) 
); 

내 문제는 내가 아주 지저분한, 4/5 수준 깊은 "foreach는"루프를 끝낼 인해 지저분한 코드를 디버깅하기 어려운 실수를 무리을 끝낼 것입니다. 아마도 RecursiveArrayIterator와 같은 것을 사용하여 이것을 수행하는 깨끗한 방법이 있을까요? PHP 반복자 객체에 대한 많은 경험이 없습니다. 당신이 후로,

function searchLink($iLink, &$rgData) 
{ 
    $rgResult = []; 
    foreach($rgData as $sLine=>$rgLines) 
    { 
     foreach($rgLines as $sWord=>$rgWord) 
     { 
     if($rgWord['DatabasePos']==$iLink) 
     { 
      $rgResult[]=['line'=>$sLine, 'word'=>$sWord]; 
     } 
     } 
    } 
    return $rgResult; 
} 

//$rgData is a data array 
foreach($rgData as $sLine => $rgLines) 
{ 
    foreach($rgLines as $sWord=>$rgWord) 
    { 
     foreach($rgWord['RelationsInDatabase'] as $iPosition) 
     { 
     $rgData[$sLine][$sWord]['RelationsInLinesOfText'][]=searchLink($iPosition, $rgData); 
     } 
    } 
} 

도 : 도움

답변

1

그것은 추한 솔루션입니다,하지만 난 당신이 두 번 중첩 된 전체 배열을 반복해야합니다 어떤 경우에 생각에 대한

감사합니다 위치가 고유하다면 언급되지 않고 배열 ['line'=>$sLine, 'word'=>$sWord]이 각 엔트리에 기록됩니다.

관련 문제