login  Naam:   Wachtwoord: 
Registreer je!
 Forum

een array echo'en (Opgelost)

Offline Mactaris - 15/01/2015 12:38 (laatste wijziging 15/01/2015 13:45)
Avatar van MactarisNieuw lid Hoi allemaal,

Ik ben nieuw hier en ook redelijk nieuw in PHP, laat ons stellen dat ik quasi een leek ben.
Ik heb een schaaksite en daarin is er een scirpt met de volgende functie
  1. function writeHistoryPGN($format = "color", $single = 'none')
  2. {
  3. global $history, $numMoves, $MSG_LANG; $_SESSION;
  4.  
  5. if ($format == "color"){
  6.  
  7. echo '<table border="0" width="250" class="TABLE" align="center">';
  8. echo "<tr><th class='THTOP'>Geschiedenis</th></tr>";
  9. echo "<tr><td><div style='width:250;overflow:auto;height:147'><table border='1' width='230' align='center' cellspacing='0' cellpadding='3'>";
  10. echo ("<tr><td bgcolor='#c0c0c0' width='30'><font color=black><b>Zet</font></td>");
  11. echo ("<td bgcolor='white' colspan='2' align='center'><font color='black'><b>Wit</font></td>");
  12. echo ("<td bgcolor='white' colspan='2' align='center'><font color='black'><b>Zwart</b></font></td></tr>\n");
  13. }
  14. for ($i = 0; $i <= $numMoves; $i+=2)
  15. //for($i = $numMoves; $i >= 0; $i-=2)
  16. //for ($i = $numMoves; $i >= 0; $i--) //verbose
  17. {
  18.  
  19.  
  20. if ($format == "color")
  21. $export = false;
  22. else $export = true;
  23.  
  24. if ($format == "color")
  25. echo ("<tr><td align='center' bgcolor='#BBBBBB'><font color='black'>".(($i/2) + 1)."</font></td><td bgcolor='white' align='center'><font color='black'>");
  26. $tmpReplaced = "";
  27. if (!is_null($history[$i]['replaced']))
  28. $tmpReplaced = $history[$i]['replaced'];
  29.  
  30. $tmpPromotedTo = "";
  31. if (!is_null($history[$i]['promotedTo']))
  32. $tmpPromotedTo = $history[$i]['promotedTo'];
  33.  
  34. $tmpCheck = ($history[$i]['isInCheck'] == 1);
  35.  
  36. if ($format == "plain" && $single != 'single')
  37. {
  38. if (ceil(($i+1)/2) > 1 && $single == 'chess')
  39. {
  40. echo "<br />";
  41. }
  42.  
  43. echo ceil(($i+1)/2).". ";
  44. }
  45.  
  46. $last_move=moveToPGNString($history[$numMoves]['curColor'], $history[$numMoves]['curPiece'], $history[$numMoves]['fromRow'], $history[$numMoves]['fromCol'], $history[$numMoves]['toRow'], $history[$numMoves]['toCol'], $tmpReplaced, $tmpPromotedTo, $tmpCheck);
  47. $p = mysql_query("UPDATE games SET last_move='".$last_move."' WHERE gameID=".$_SESSION['gameID']."");
  48. * echo moveToPGNString($history[$i]['curColor'], $history[$i]['curPiece'], $history[$i]['fromRow'], $history[$i]['fromCol'], $history[$i]['toRow'], $history[$i]['toCol'], $tmpReplaced, $tmpPromotedTo, $tmpCheck, $export, $single)." ";
  49. $export, $single" ;
  50. if ($format == "color")
  51. {
  52. echo "</td><td align='center' bgcolor='#C6D9EC' height=18>";
  53. if ($tmpReplaced!="")
  54. echo "<img src='./images/pieces/".$_SESSION['pref_theme']."/black_".$tmpReplaced.".gif' height='15' align='left'> ";
  55. echo ("</font></td><td bgcolor=white align='center'><font color='black'>");
  56. }
  57.  
  58. if ($i == $numMoves){
  59. if ($format == "color")
  60. echo ("&nbsp;");
  61. }
  62. else
  63. {
  64. $tmpReplaced = "";
  65. if (!is_null($history[$i+1]['replaced']))
  66. $tmpReplaced = $history[$i+1]['replaced'];
  67.  
  68. $tmpPromotedTo = "";
  69. if (!is_null($history[$i+1]['promotedTo']))
  70. $tmpPromotedTo = $history[$i+1]['promotedTo'];
  71.  
  72. $tmpCheck = ($history[$i+1]['isInCheck'] == 1);
  73.  
  74. if ($format == "plain")
  75. echo ceil(($i+1)/2).". ";
  76.  
  77. * echo moveToPGNString($history[$i+1]['curColor'], $history[$i+1]['curPiece'], $history[$i+1]['fromRow'], $history[$i+1]['fromCol'], $history[$i+1]['toRow'], $history[$i+1]['toCol'], $tmpReplaced, $tmpPromotedTo, $tmpCheck,$export,$single)." ";
  78. if ($format == "color")
  79. {
  80. echo "</td><td align='center' bgcolor='#C6D9EC' height=18>";
  81. if ($tmpReplaced!="")
  82. echo "<img src='./images/pieces/".$_SESSION['pref_theme']."/white_".$tmpReplaced.".gif' height='15' align='left'> ";
  83. }
  84. }
  85.  
  86. if ($format == "color")
  87. echo ("</font></td></tr>\n");
  88. else{
  89. if (floor(($i+1)/8) == ($i)/8 && $i != 0)
  90. echo "\n";
  91. }
  92.  
  93. }
  94.  
  95. if ($format == "color")
  96. echo ("</table></div></table>\n");
  97.  
  98. }


Deze functie beeld de zetgeschiedenis af als volgt
zet 1
2
3
Nu wil ik de zetten omdraaien, dus=
zet 3
2
1
Ik heb geprobeerd met de for loop te draaien maar dat lukt niet,
er heeft mij iemand de raad gegeven de echos in een arrat te zetten dus:
ipv echo "echotxt" wordt het $allezettenineentabel[rijnummer]="echotxt";
Het gaat meer bepaald over de echo's met een * voor
En dan op het eind van de functie
  1. echo implode(array_reverse($allezettenineentabel));

toe te voegen.
Daar ik een leek ben is het voor mij moeilijker dan ik dacht.
Dus mijn vraag:
Wie kan er mij helpen?
Dank bij voorbaat
Mario

5 antwoorden

Gesponsorde links
Offline Jointjeff - 15/01/2015 13:25
Avatar van Jointjeff HTML interesse De vraag is me wat onduidelijk. Maar het omdraaien van de sortering van een array en die vervolgens echo'en kan zo:

Plaatscode: 142427

Hoop dat je er wat aan hebt.
Offline Mactaris - 15/01/2015 13:50
Avatar van Mactaris Nieuw lid
Jointjeff schreef:
De vraag is me wat onduidelijk. Maar het omdraaien van de sortering van een array en die vervolgens echo'en kan zo:

Plaatscode: 142427

Hoop dat je er wat aan hebt.


Mijn vraag is: hoe zet ik een echo in een array?
nu staat er
  1. echo moveToPGNString($history[$i]['curColor'], $history[$i]['curPiece'], $history[$i]['fromRow'], $history[$i]['fromCol'], $history[$i]['toRow'], $history[$i]['toCol'], $tmpReplaced, $tmpPromotedTo, $tmpCheck, $export, $single)." ";
  2. $export, $single" ;

Die echo wil ik in een array plaatsen, maar weet niet hoe.
Ik heb geprobeerd met dit:
  1. $zetten[$history[$i]]=echo curcolor,curpiece,fromrow enz

maar ik krijg een error nl. Illegal offset.
Sorry als ik niet duidelijk was, hoop dat dit beter is
Mario
Offline Thomas - 15/01/2015 17:20 (laatste wijziging 15/01/2015 17:22)
Avatar van Thomas Moderator moveToPGNString lijkt mij een functie om informatie te formatteren voor het afdrukken ervan.

In beide gevallen is $history je bron.

Je zou $history rechtstreeks achterstevoren kunnen doorlopen in stappen van 2, zoals ook in regel 15 staat? Je hoeft het niet eens in een aparte array te zetten.

Wat probeer je uiteindelijk te bereiken?

Een array kun je naar je scherm dumpen met var_dump($history) of print_r($history).

Als je print_r() gebruikt kun je e.e.a. leesbaar afdrukken door middel van:


  1. <?php
  2. echo '<pre>'.print_r($history, true).'</pre>';
  3. ?>


Let er wel op dat print_r() (en var_dump volgens mij ook, not sure) alles gewoon rauw afdrukt, dus ook HTML/JavaScript (en die JavaScript wordt dus uitgevoerd). Hier moet je wel een beetje voorzichtig mee zijn als je bron user input bevat.

Een veiliger alternatief is wellicht dit script (maakt HTML en JavaScript onschadelijk), maar als het een interne datastructuur van je schaakprogramma is (en je het voor een korte debug ronde gebruikt) kan het waarschijnlijk niet zoveel kwaad om gewoon print_r te gebruiken.

Your call though .
Bedankt door: Mactaris
Offline Mactaris - 15/01/2015 17:33 (laatste wijziging 15/01/2015 17:33)
Avatar van Mactaris Nieuw lid Ik heb regel 15 geprobeerd maar dan krijg ik zetnummering van 1,1.5,2,2.5 enz
Zwart staat bij wit en wit bij zwart.
Ik denk niet de regel 15 de oplossing is  
1 d2-d4 Pg8-f6
2 c2-c4 e7-e6
3 Pg1-f3 c7-c5

bovenstaande wordt nu afgebeeld met de huidige functie, wat ik wil is dat het zo afgebeeld wordt:
3 Pg1-f3 c7-c5
2 c2-c4 e7-e6
1 d2-d4 Pg8-f6

thx very much
Offline Thomas - 15/01/2015 17:50 (laatste wijziging 15/01/2015 17:51)
Avatar van Thomas Moderator Als je $history in omgekeerde volgorde doorloopt lijkt het mij ook belangrijk om te weten waar je start?

Als $numMoves even is, wil dit zeggen dat wit de laatste zet deed, en als $numMoves oneven is dat zwart de laatste zet deed?

Als zwart de laatste zet heeft gedaan in je $history worden wit en zwart mogelijk verwisseld als je in stappen van 2 terugloopt?

Ik zou dus waarschijnlijk beginnen met het controleren of $numMoves een even of oneven getal is.

Wanneer je vooruit door $history loopt weet je wie begint (wit, lijkt mij). Wanneer je terugloopt zul je dit ff moeten checken.

En wat je dus uiteindelijk wilt is de omgekeerde volgorde van paren van zetten, als ik het goed begrijp?
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.306s