2014-11-05 2 views
0

특정 배열을 다른 배열로 검색하려고합니다. array_intersect()와 같은 PHP 함수를 찾고 있었지만 실제로 필요하지는 않습니다.배열을 배열로 검색 (float 번호로) 주어진 오류로

내 문제는 다음과 같습니다. $array_1 = [5.3,5.0,6.7] 및 $ array_2 = [5.0, 5.2,6.5,7.5,8.25]입니다. 나는 array_1의 값을 $ array_2에 가까운 값으로 검색 할 필요가 있으며 연속적이어야한다.

이 예에서 결과 오류는 0.5보다 작아야합니다. 따라서, 배열 번호 1이 배열 2에서 주어진 오류와 함께 발견되었으므로 $array_1$array_2에 있습니다.

  • 5.3-5.0 = 0.3 (< 0.5)
  • 5.0-5.2 = 0.2 (< 0.5)
  • 6.7 -

은 PHP 함수 6.5 = 0.2 (< 0.5) 있는가 주어진 eps로 $ array_1을 $ array_2로 검색합니다. 오류? google.com에서 찾을 수 없었습니다.

저는 도움이 될만한 사람 모두에게 제 생각과 문제가 분명하기를 바랍니다.

대단히 감사합니다.

+1

없음. 없다. 너는 너 자신을 써야 할 것이다. PHP는 도구 상자입니다. 그것에 도달하지 않고 완전히 지어진 집을 뽑을 것을 기대하십시오. 망치, 드라이버, 톱 등을 당겨 집을 지어 라. –

+1

@MarcB : 해머라고하면 : http://blog.codinghorror.com/the-php-singularity/ –

+0

고맙습니다. 나는 저를 도울 수있는 것이 있는지 궁금합니다. bycicle을 재발견하지 마라. –

답변

1

나는 당신의 최종 목표에 대해 잘 모르겠지만, 당신이 얻을 수있는이 코드는 시작 :

$array_1 = array (5.3,5.0,6.7);   #search for this 
$array_2 = array (3.0, 4.4, 5.0, 5.2,6.5,7.5,8.25, 5.0, 5.2, 8.2, 5.0, 4.2, 4.1, 5.3,5.0,6.7); #inside this 

$err = 0.5; 

$matchkeys= array(); 

$i = 0; 
$tmp_match = ''; 
foreach ($array_2 as $k => $v) {  #crawl through array_2 

     if (abs($v - $array_1[$i]) < $err) { 
       echo "match at $k for $i \n"; 
       if ($i==0) {$tmp_match = $k;} 
       $i++;   #if array one matches, then check next array 1 against next array 2 
       if ($i == count($array_1)) { #done matching array_1 ? 
         $matchkeys[] = $tmp_match;  //push first index value of compelte match to array 
         $tmp_match = ''; 
         $i = 0; 
       } 
     } 
     else { 
       $tmp_match = ''; 
       $i=0;   #otherwise start over 
     } 
} 

echo "\n\n found complete matches in array_2 at index: \n"; 
print_r($matchkeys); 
+0

감사합니다! 어제 밤나는 비슷한 것을 생각하고있었습니다. 하지만 충분한 시간이 없었습니다. –

관련 문제