[PHP] multidimensional array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik kom er even niet meer uit. Ik heb een matrix, zoiets als hieronder.

xx 1 2 5 6 7 8 9
16 x
23 x x x x x x x
32 x
50 x x x x x
63 x x x x
75 x x x x x

En dit wil ik in arrays inlezen.
Wie kan mij even op weg helpen?

Acties:
  • 0 Henk 'm!

  • Access
  • Registratie: Juni 2001
  • Laatst online: 14-09 17:22
Ik weet niet exact wat je met die kruisjes bedoelt, maar als dat true of false aangeeft kan je het onderstaande voorbeeld makkelijk aanpassen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

function getMatrixVal($row, $col, $matrix)
{
        return $matrix[$row][$col];
}

//------------------------------------------------------

$matrix = NULL;
$rows = 10;
$cols = 10;

for($i=0; $i<$rows; $i++)
{
        for($c=0; $c<$cols; $c++)
        {
                $matrix[$i][$c] = "rij: ".$i." kolom: ".$c;
        }
}

echo "Positie 2,3 heeft waarde: ".getMatrixVal(2, 3, $matrix)."<br>";

?>

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op vrijdag 11 februari 2005 @ 14:50:
Ik kom er even niet meer uit. Ik heb een matrix, zoiets als hieronder.

xx 1 2 5 6 7 8 9
16 x
23 x x x x x x x
32 x
50 x x x x x
63 x x x x
75 x x x x x

En dit wil ik in arrays inlezen.
Wie kan mij even op weg helpen?
Hoe een 2 dimensionale array werkt staat vast wel uitgelegd in de PHP docs bij het stukje over array's en anders zijn er genoeg tutorials te vinden die je zoiets uit kunnen leggen. Hier op GoT gaan we er vanuit dat je een stuk basis kennis als dit zelf onder de knie kunt krijgen of dat je in elk geval zelf wat hebt geprobeerd. Zie ook: P&W FAQ - De "quickstart"


Dus: Wat heb je zelf al geprobeerd? Wat lukt daar niet mee? :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, even wat extra informatie.

Ik heb als input een tabel met:
x y
1 3
1 4
2 5
2 3
2 4
3 5
3 4

dit moet er in een matrix op een htmlpagina zo uit zien:

code:
1
2
3
4
  1 2 3 
3 x x 
4 x x x
5   x x

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 20-09 21:39

Kaastosti

Vrolijkheid alom!

Je weet hoe breed je het ding wilt hebben, dus je kunt in een for-loopje een maximum aangeven. Vervolgens ga je op de manier die Access aangeeft door je array heen lopen en overal waar je een waarde van tegenkomt zet je een x in het bijbehorende array veld --> $array[x][y].

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De breedte is niet van te voren bekend, en de hoogte evenmin.

Acties:
  • 0 Henk 'm!

  • ixi
  • Registratie: December 2001
  • Laatst online: 27-08 23:59

ixi

Hele omslachtige manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$xmax = 0;
$ymax = 0;

foreach ($array as $key => $row)
{
  if ($key > $xmax) $xmax = $key;
  foreach ($row as $key2 => $row2) if ($key2 > $ymax) $ymax = $key2;
} 

for ($x = 1; $x <= $xmax; $x++)
{
  for ($y = 1; $y <= $ymax; $y++)
  {
    if (isset($array[$x][$y])) echo "x"; else echo " ";
  }
  echo "<br>";
}

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 11 februari 2005 @ 16:11:
Ok, even wat extra informatie.

Ik heb als input een tabel met:
x y
1 3
1 4
2 5
2 3
2 4
3 5
3 4

dit moet er in een matrix op een htmlpagina zo uit zien:

code:
1
2
3
4
  1 2 3 
3 x x 
4 x x x
5   x x
afhankelijk waar je je data vandaan haalt, maar gezien je dat niet vertelt gok ik maar dat het in een bestand staat ofzo.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?
$arr = array();
$max_x = 0;
$max_y = 0;
$min_x = 99999;
$min_y = 99999;
$handle = fopen("input.txt", "r") or die('no file');
while (!feof($handle)) {
    $line = fgets($handle);
    list($x,$y) = split(' ',chop($line));

    if (is_numeric($x) and is_numeric($y)) {
        $arr[$x][$y] = 'set';
        $min_x = get_min($min_x,$x);
        $min_y = get_min($min_y,$y);
        $max_x = get_max($max_x,$x);
        $max_y = get_max($max_y,$y);
    }
}
fclose($handle);


print "<pre>";
print_r($arr);
print "max_x:".$max_x."\n";
print "max_y:".$max_y."\n";
print "min_x:".$min_x."\n";
print "min_y:".$min_y."\n";
print "</pre>";


$HTML = "<table border=1>";
$HTML .= "<tr>";
$HTML.= "<td>&nbsp;</td>";
for ($x=$min_x;$x<=$max_x;$x++) { $HTML.= "<td>$x</td>";}
$HTML .= "</tr>";
for ($y=$min_y;$y<=$max_y;$y++) {
    $HTML .= "<tr>";
    for ($x=$min_x-1;$x<=$max_x;$x++) {
        $HTML .= "<td>"; 
        if ($x==$min_x-1) { $HTML .= $y;}else{
            if ($arr[$x][$y]=='set') { $HTML .= "x"; }else{$HTML .="&nbsp;";}
        }
        $HTML .= "</td>";
    }
    $HTML .= "</tr>";
}
$HTML .= "</table>";

print $HTML;

function get_min($min_value,$value) {
    $return = $min_value;
    if ($min_value>$value) { $return = $value; }
    return $return;
}
function get_max($max_value,$value) {
    $return = $max_value;
    if ($max_value<$value) { $return = $value; }
    return $return;
}

[ Voor 15% gewijzigd door Verwijderd op 12-02-2005 00:04 ]

Pagina: 1