2009-12-10 6 views
1

문제는 PHP에서 각 행과 열에 키가 있어야하는 2D 행렬을 만들어야한다는 것입니다. 나는이 일을 시도했다. 그러나 행렬을 닮지 않는 2-D 배열이 만들어졌다.PHP에서 2 차원 행렬 만들기

다음

$x=$row['start_id'];
$y=$row['dest_id'];
$d=$row['distance'];
$this->map[$x][$y]=$d;

지도는 의도 행렬이다 : 나는 다음과 같은 코드를 사용했다. 이 코드의 목적은 인접 행렬을 작성한 다음 설정되지 않은 셀을 최대 거리로 채우는 것입니다. 위의 코드에서 $ x, $ y 및 $ d는 mysql 쿼리의 결과에서 파생됩니다.

샘플 출력 :

Array (
    [10010012] => Array ( 
     [10010013] => 2 
     [10010016] => 8 
    ) 
    [10010016] => Array ( 
     [10010015] => 5 
    ) 
    [10010013] => Array ( 
     [10010014] => 7 
     [10010016] => 3 
    ) 
    [10010014] => Array ( 
     [10010015] => 2 
    ) 
) 

이제 문제는 내가 빈 셀
예를 채울 수 아니라고이다 행 키 => [10010012] 및 열 키 => [10010015] (값을 설정할 수 없음)

도움이 되었습니까? 가능한 경우 이러한 행렬을 통과하는 방법도 언급하십시오.

나는 비교적 초보자이며 내 문제를 설명하기 위해 최선을 다했습니다. 그러나 어떤 단점을 발견하면 그들을 지적하십시오.

편집 : 매트릭스가 정사각형이 아닙니다. 한편

$this->map[10010012][10010015]= MAX_DISTANCE; 

+0

"수 없음"? 정확히 무엇이 오류 메시지입니까, 아니면 작동하지 않는 것은 무엇입니까? – Franz

+0

오류 메시지가 아닙니다. 나는 잘못된 방식으로 연관 배열을 사용하여 행렬을 만들고 있습니다. 논리에 문제가있는 것 같습니다. – 5lackp1x3l0x17

답변

5

, 왜 MAX_DISTANCE 모든 빈/존재하지 않는 셀을 설정 하시겠습니까? 지도를 불완전하게두고 셀 이 없으면 값으로 간주합니다.

편집 : 간단한 예

define('MAX_DISTANCE', PHP_INT_MAX); 

$map = array(
    10010012 => array (10010013 => 2, 10010016 => 8), 
    10010016 => array (10010015 => 5), 
    10010013 => array (10010014 => 7, 10010016 => 3), 
    10010014 => array (10010015 => 2) 
); 

function getValue(&$map, $x, $y) { 
    return isset($map[$x][$y]) ? $map[$x][$y] : MAX_DISTANCE; 
} 

function setValue(&$map, $x, $y, $value) { 
    if (!isset($map[$x])) { 
    $map[$x] = array($y => $value); 
    } 
    else { 
    $map[$x][$y] = $value; 
    } 
} 

// get an "existing" value from $map 
echo getValue($map, 10010012, 10010016), "\n"; 
// get a "non-existing" value from $map 
echo getValue($map, 10010014, 10010016), "\n"; 

// set a "new" value 
setValue($map, 10010014, 10010016, 5); 
// $map has been altered 
var_dump($map[10010014]); 

인쇄

8 
2147483647 
array(2) { 
    [10010015]=> 
    int(2) 
    [10010016]=> 
    int(5) 
} 
+0

아마도 모든 셀에 max_distance를 수동으로 추가 할 수 없습니다. 설정되지 않은 셀을 찾을 때마다 max_distance를 설정하는 foreach 루프를 사용하여 자동으로 수행됩니다. – 5lackp1x3l0x17

+0

하지만 MAX_DISTANCE를 설정하는 이유는 무엇입니까? 위의 예와 같이 "MAX_DISTANCE가 같지 않음"을 고려하지 않으시겠습니까? $ map [10010014] [10010016] (아직)이 없으므로 두 번째 getValue(), 즉 getValue ($ map, 10010014, 10010016)는 MAX_DISTANCE를 반환합니다. 이것이 왜 충분하지 않은지 자세히 설명해주십시오. – VolkerK

+0

편집을 보지 못했습니다. 이제 나는 네가 말하는 것을 이해한다. 나는 당신의 솔루션을 구현하려고 노력할 것입니다. – 5lackp1x3l0x17