Hulp gevraagd met PHP-opdracht

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henkie Prut

Henkie Prut

24/11/2014 11:32:39
Quote Anchor link
Goedemorgen allen,


Nieuw hier op het forum dus excuus als dit bericht verkeerd is geplaatst.
Ben redelijk nieuw met PHP, volg een aantal opleidingen tegelijk om zo veel mogelijk kennis te vergaren. Voor 1 van de opleiders heb ik een opdracht waar ik mee worstel. In onderstaand script probeer ik een array te vullen met 60 willekeurige cijfers tussen 10 en 70. Vervolgens wil ik deze in een tabel van 6 bij 6 printen, waarbij elke regel 6 getallen heeft. De eerste 6 tussen 10 en 20, tweede rij tussen 20 en 30 enz.

Ik ben ervan op de hoogte dat ik slecht een regel heb en dat mijn <TR> en </TR> niet juist zijn geplaatst maar ik heb ze daar even "weggemoffeld". Deze code geeft een lege browserpagina. Elke keer als ik een aanpassingen maak waarvan ik denk dat dat het moet zijn, kreeg ik een foutmelding.

Wellicht is er iemand die mij een duwtje in de goede richting kan/wil geven. Ik hoef niet per se een oplossing op een presenteerblaadje ( ik ben immers aan het leren ) maar ik loop nu redelijk vast. Alvast bedankt voor eventuele antwoorden en mocht mijn code niet compleet genoeg zijn of als ik meer info moet verschaffen hoor ik dat graag!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<title>Inzendopdracht 051R3</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body bgcolor="#FFFFFF">
<TABLE>
<?php
        $random_array
= array();

        function
fill_table($array) {
                 for($j=10; $j<=70; $j++) {
                 $array[] = [mt_rand(10,70)];
                 }

                 return $array;
        }


        fill_table($random_array);

        function
print_table($arrayPrint) {
        for ($j=0; $j < 6; $j++) {
            if ($arrayPrint < 20 ) {
                    echo ("<TR><TD>" . $arrayPrint . "</TD></TR>");
                    }
            }
        }

        print_table($random_array);


?>

</TABLE>
</body>

</html>



Bij voorbaat dank,

Elian
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 24/11/2014 11:36:54 door - Ariën -
 
PHP hulp

PHP hulp

14/05/2024 19:17:26
 
Jacco Engel

Jacco Engel

24/11/2014 12:10:09
Quote Anchor link
Kleine tip :
En return value word niet magisch opgevangen maar moet je zelf doen, voorbeeld :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function plusOne($number) {
   return $number + 1 ;
}

$numberPlusOne = plusOne(1);
echo $number . " plus 1 is " . $numberPlusOne;
?>


Daar zou je een eind mee moeten komen :)
Gewijzigd op 24/11/2014 12:10:36 door Jacco Engel
 
Ivo P

Ivo P

24/11/2014 12:25:39
Quote Anchor link
random vullen van een array kan mooier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$random_array
= range(10,70);
shuffle($random_array);
?>


Maar ik snap de opdracht niet helemaal.

met 6x6 heb je maar 36 van de 60 waarden.

Bij de eerste 36 zitten niet per se de waarden tussen 10 en 20. en ook niet per se 6 stuks.
Wat gebeurt er dan in de eerste rij van je tabel?
Net zo voor de volgende 6 rijen.
 
Henkie Prut

Henkie Prut

24/11/2014 12:41:45
Quote Anchor link
@Jacco:
Ik moet de resultaten natuurlijk opvangen in een variable. Nooit aan gedacht. :S
Hartelijk dank voor de tip. Ik ben er momenteel een beetje mee aan het spelen, krijg nog niet het gewenste resultaat maar er zit nog ergens een foutje in mijn code. We geven niet gelijk op dus ik speel er nog even mee verder voordat ik weer voor hulp terug kom.

@Ivo:
Ik heb door middel van shuffle de tabel goed gekregen maar ik heb de indruk dat het bij deze opdracht de bedoeling is dat ik van de mt_rand methode gebruik maak.
Het doel van de opdracht is een bingokaart maken. Nadat ik de tabel gevuld heb met een aantal van de 60 getallen moet uit de volle array ( dus de volle 60 getallen ) random getallen laten trekken en die afstrepen op de "bingokaart"-tabel. Voorlopig worstel ik eerst nog met het juist afdrukken van de bingokaart zelf. Haha. Dank voor de tip!

@-Aar- Ik zal in het vervolg de code tags gebruiken. :)
 
Ivo P

Ivo P

24/11/2014 12:46:34
Quote Anchor link
waarschijnlijk is het niet de bedoeling dat je (met mt_rand()) meerdere keren hetzelfde getal trekt?

in principe kan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php for($i=0;$i<100;$i++) { echo mt_rand(10, 70); } ?>


best 100x het getal 12 opleveren.
 
Henkie Prut

Henkie Prut

24/11/2014 12:49:20
Quote Anchor link
@Ivo; dit is inderdaad niet de bedoeling, nee. Ook nog niet aan gedacht. Ik had de indruk dat ik aardig op weg was met de opdracht maar dat blijkt toch iets minder het geval. Haha.
 
Henkie Prut

Henkie Prut

05/12/2014 12:58:06
Quote Anchor link
Jammer genoeg nog steeds vast met deze opdracht. Begeleiding laat helaas wat te wensen over. Ik merk dat ik zelf moeite heb met het begrijpen van de multidimensionale arrays.

Kan iemand mij wellicht een tip geven over hoe ik een multidimensionale array kan vullen door middel van een for-loop? Heb een aantal verschillende dingen geprobeerd maar blijf op foutmeldingen stuiten. 1 van mijn laatste pogingen betrof bijvoorbeeld onderstaand voorbeeld.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    $random_array
= array();

    function
fill_array($array) {
             for ($y=10; $y < 70; $y++) {
                 for ($x=10; $x < 70; $x++) {
                   $array[$y] = $x;
                   return $array;
                 }
             }
    }


    $random_array_filled = fill_array($random_array);
    echo $random_array_filled[2][3];

?>


Alle duwtjes in de goede richting worden zeer op prijs gesteld! :)
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/12/2014 13:11:30
Quote Anchor link
één van de grootste fouten die je hier in ieder geval maakt is de return in je for.

Ik denk dat je deze code in een functie geplaatst hebt. Zodra er tegen de return opdracht aangelopen wordt dan wordt de hele functie verlaten. Je dubbele lus zal dus bij de eerste 'loop' direct verlaten worden.
 
Ozzie PHP

Ozzie PHP

05/12/2014 13:16:32
Quote Anchor link
En een andere fout die je maakt is dat je probeert keys aan te roepen (2 en 3) die niet bestaan. Ik krijg de indruk dat je nog niet begrijpt hoe een array werkt.

Waarom begin je niet wat kleiner stapje voor stapje. Bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$test
= array();

for ($y=10; $y < 20; $y++) {
    $test[$y] = 'test: ' . $y;
}


echo 'Zo ziet de test-array er uit:<br><br>';

var_dump($test);

?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/12/2014 13:18:45
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

$tabel
= array();

for ($y=1; $y < 10; $y++) {
    for ($x=1; $x < 10; $x++) {
        $tabel[$y][$x] = $i++;
    }
}


echo '<table>';
foreach($tabel as $tr) {
    echo '<tr>';
    foreach($tabel as $td) {
        echo '<td>'. $td . '</td>';
    }

    echo '</tr>';
}

echo '</table>';

echo '<pre>';
print_r($tabel);
echo '</pre>';

?>
 
Henkie Prut

Henkie Prut

05/12/2014 13:20:33
Quote Anchor link
Dank voor de tip, Frank. Ik had nooit meer gezien dat de return in de binnenste loop zat. Zit inmiddels al zo lang op deze opdracht vast dat dat soort dingen niet eens meer opvallen.

Toevoeging op 05/12/2014 13:27:48:

Ik heb inderdaad veel moeite met arrays. Voornamelijk de multidimensionale. Het duurt lang bij mij voordat het kwrtje valt jammer genoeg. De overige onderdelen pak ik redelijk snel op maar arrays willen er niet in.

De opdracht vermeld expliciet dat ik functies moet maken op de array te vullen en om de tabel af te drukken. Arrays zelf zijn al moeilijk genoeg voor me in dit stadium, combineren met functies is blijkbaar een dodelijke combinatie.

Toevoeging op 05/12/2014 13:37:27:

Dank voor de waardevolle toevoegingen. Ben hier heel blij mee.
Ik ben wat aan het spelen met beide codes om wat dingen uit te proberen.

Als ik nu de eerste rij van de tabel zou willen vullen met een array die de getallen 10 t/m 19 bevat. En de volgende rij 20 t/m 29 etc. Hoe ga ik dit dan het beste aanpakken ( denk ook een beetje hardop hier.)
Gewijzigd op 05/12/2014 13:44:33 door Henkie Prut
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/12/2014 14:20:41
Quote Anchor link
Elian Kloppenburg op 05/12/2014 13:20:33:
Als ik nu de eerste rij van de tabel zou willen vullen met een array die de getallen 10 t/m 19 bevat. En de volgende rij 20 t/m 29 etc. Hoe ga ik dit dan het beste aanpakken ( denk ook een beetje hardop hier.)


Hou de dingen uit elkaar. En dan doel ik met name op het volgende:
Een array-key is heel iets anders dan de waarde die je daar in opslaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$tabel
[0] = '10';
$tabel[1] = '11';
// etc

?>

de array met key 0 heeft nu 10 als waarde
de array met key 1 heeft nu 11 als waarde

Je moet dus zorgen dat de key telkens met 1 verhoogd wordt, beginnend bij 0
en dat de waarde ook telkens met 1 verhoogd wordt, maar beginnend bij 10

Er zijn misschien 50 manieren om dit te bewerkstelligen maar de meeste programmeurs zullen zo veel mogelijk met een rekensommetje werken en zo min mogelijk vaste waardes.

dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
for $i = 0 ; $i < 10 ; $i++) // 0 t/m 9
    $tabel[$i] = $i + 10; // 0+10=10, 1+10=11, 2+10=12 etc
?>


Nu iets moeilijker met twee dimensionale array:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
for $j = 0 ; $j < 10 $j++) // 0 t/m 9
{
    for $i = 0 ; $i < 10 ; $i++) // 0 t/m 9
        $tabel[$j][$i] = $i + (10 * ($j +1));
    // eerste loop ($j = 0): 0+(10*(0+1))=10, 1+(10*(0+1))=11, 2+(10*(0+1))=12 etc
    // tweede loop ($j = 1): 0+(10*(1+1))=20, 1+(10*(1+1))=21, 2+(10*(1+1))=22 etc

}
?>

(Als eerste wordt uitgerekend wat tussen haakjes staat)
 
- SanThe -

- SanThe -

05/12/2014 14:29:42
Quote Anchor link
Misschien heb je hier ook nog iets aan?
http://www.phpbeginners.nl/?page=Array%27s
 
Henkie Prut

Henkie Prut

05/12/2014 14:45:25
Quote Anchor link
Allebei zeer helpvol!

@Frank: ik had hetzelfde effect bereikt door middel van verschillende if/elseif statements binnen mijn for lop maar jouw oplossing is uiteraard veel minder omslachtig! Top! ik leer hier veel van. Meer dan de "feedback" van de leraar. :S

Toevoeging op 05/12/2014 15:48:37:

Mag ik jullie allen onwijs bedanken voor jullie hulp!
Ik heb hier een eeuwigheid op vastgezeten maar ik heb de tabel eindelijk voor elkaar! De shuffle functie zit er ook in verwerkt. Alles is ook een stuk duidelijker. Mijn code zal misschien nog niet 100% optimaal zijn maar ik ben iig heel erg blij met dit resultaat! Volgende stap is om er een werkende bingokaart van gemaakt maar dit moet vast ook gaan lukken. Voor de geïnteresseerden, dit is mijn code so far:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<title>Inzendopdracht 051R3</title>
<meta charset=UTF-8" />
</head>
<body bgcolor="#FFFFFF">
<Table width="400">
<style type="text/css">
table, th, td {
   border: 1px solid black;
   text-align: center;
   padding: 20px;
   font-family: verdana, open-sans;
   font-weight: bold;
   font-size: 18px;
}
</style>

<?php
    $random_array
= array();

    function
fill_array($array) {
             for ($j = 0; $j < 6; $j++) {
                 for ($i = 0; $i < 10; $i++) {
                 $array[$j][$i] = $i + (10 * ($j +1));
                 }
                
            }

            for ($k=0; $k<6; $k++) {
            shuffle($array[$k]);
            }

             return $array;
    }


    $array_fill = fill_array($random_array);

    function
print_array($array2) {
             for ($y=0; $y < 6; $y++){
             echo("<TR>");
                 for ($x=1; $x < 7; $x++) {
                     echo ("<TD>" . $array2[$y][$x] . "</TD>");
                 }

             echo "</TR>";
             }
    }



    print_array($array_fill);
?>

</table>
</body>

</html>


Nogmaals dank. Als ik het spel werkend heb ( of als ik jullie hulp weer nodig heb :P ) zal ik zeker even opnieuw posten.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.