5% van valueA is niks anders danquote:Op donderdag 27 oktober 2005 20:16 schreef Swetsenegger het volgende:
Bestaat er een php functie welke een waarde snel procentueel kan vergelijken.
Met andere woorden:
if valueA-valueB < 5% van valueA
want (valueA-valueB)*(valueA/100) vind ik wat ranzig
Joh!quote:Op donderdag 27 oktober 2005 21:07 schreef the_disheaver het volgende:
[..]
5% van valueA is niks anders dan
valueA * 0,05
if(valueA-valueB < valuaA / 20)quote:Op donderdag 27 oktober 2005 20:16 schreef Swetsenegger het volgende:
Bestaat er een php functie welke een waarde snel procentueel kan vergelijken.
Met andere woorden:
if valueA-valueB < 5% van valueA
want (valueA-valueB)*(valueA/100) vind ik wat ranzig
dusch...quote:Op donderdag 27 oktober 2005 20:34 schreef Swetsenegger het volgende:
Ik zat heel ranzig te denken, maar toen ik hem hier boven uittikte vond ik het eigenlijk ook wel meevallen
Bedankt voor de tip.quote:Op donderdag 27 oktober 2005 21:26 schreef Wifibro het volgende:
Hee Superrembo, kom je weer meedoen met PHP Golf?
http://www.phpfreakz.nl/forum.php?forum=5&iid=721061![]()
quote:Beste PHP-ers,
--[ PHP Golf
Een nieuwe editie van PHP Golf!
--[ Wat is PHP Golf?
De bedoeling is een PHP script te maken met zo min mogelijk karakters.
Dus zo min mogelijk letters, nummers, spaties, newlines en dergelijke.
Met het script moet je een doelstelling bereiken.
We gaan ervan uit dat je de recenste PHP 4.x, op het moment 4.4,
versie hebt en standaard php.ini configuratie. Tenzij anders vermeld.
(Standaard: register_globals = off)
Het script moet op UNIX-gebaseerde en Windows systemen werken.
--[ Voor wie is PHP Golf?
De competitie is voor iedereen toegankelijk.
--[ Inzendingen
Je kunt je oplossing sturen naar:
phpgolf [at] gmail.com
(Disclaimer: je e-mail zal niet worden gebruikt voor
spam of worden doorgegeven aan derden)
--[ Doelstelling
Het script moet de volgende output genereren:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
BCDEFGHIJKLMNOPQRSTUVWXYZA
CDEFGHIJKLMNOPQRSTUVWXYZAB
DEFGHIJKLMNOPQRSTUVWXYZABC
EFGHIJKLMNOPQRSTUVWXYZABCD
FGHIJKLMNOPQRSTUVWXYZABCDE
GHIJKLMNOPQRSTUVWXYZABCDEF
HIJKLMNOPQRSTUVWXYZABCDEFG
IJKLMNOPQRSTUVWXYZABCDEFGH
JKLMNOPQRSTUVWXYZABCDEFGHI
KLMNOPQRSTUVWXYZABCDEFGHIJ
LMNOPQRSTUVWXYZABCDEFGHIJK
MNOPQRSTUVWXYZABCDEFGHIJKL
NOPQRSTUVWXYZABCDEFGHIJKLM
OPQRSTUVWXYZABCDEFGHIJKLMN
PQRSTUVWXYZABCDEFGHIJKLMNO
QRSTUVWXYZABCDEFGHIJKLMNOP
RSTUVWXYZABCDEFGHIJKLMNOPQ
STUVWXYZABCDEFGHIJKLMNOPQR
TUVWXYZABCDEFGHIJKLMNOPQRS
UVWXYZABCDEFGHIJKLMNOPQRST
VWXYZABCDEFGHIJKLMNOPQRSTU
WXYZABCDEFGHIJKLMNOPQRSTUV
XYZABCDEFGHIJKLMNOPQRSTUVW
YZABCDEFGHIJKLMNOPQRSTUVWX
ZABCDEFGHIJKLMNOPQRSTUVWXY
Nu mag jij het script programmeren en liefst zo kort mogelijk.
--[ Deadline:
De deadline is over 8 dagen.
Vrijdag 19:00 4 november 2005
-----
Post in dit topic vragen/suggesties.
GEEN OPLOSSINGEN!
Mocht je een oplossing hebben, dan mag je gerust je karakter aantal posten.
Dit om andere te stimuleren![]()
Diegene die het minste karakters heeft gebruikt, wint!
Veel succes,
Tri Pham
| 1 2 | <?php $Bericht[] = array('Thomas','iemand@hotmail.com',' ','Hoogkerk','14-09-2004 23:16:05','Berichtje'); ?> |
staan er array's in het tekstbestand of platte tekst welke je zelf array maakt?quote:Op donderdag 27 oktober 2005 23:12 schreef sh4dow het volgende:
Even een vraag, ik heb een tijdje een gastenboek script gebruikt met een tekstbestand. Nu heb ik zelf een nieuw gastenboek gemaakt met een mySQL database.
Graag zou ik de oude berichten uit het tekstbestand willen toevoegen aan de database, om de oude berichten niet verloren te laten gaan.
Het tekstbestand ziet er zo uit:
[ code verwijderd ]
enz, zo staan er 311 berichten in dit tekstbestand, in Arrays.
Hoe kan ik deze array nu splitten, en dan ieder bericht in een loop toevoegen aan de database?
| 1 2 3 4 5 6 7 | include_once('mijntekstbestandmetberichten.php'); for($i=0;$i<count($Berichten);$i++) { // huidig bericht = $Bericht[$i] (array!) } ?> |
que?quote:Op vrijdag 28 oktober 2005 16:28 schreef Swetsenegger het volgende:
Alleen.... hoe laat je hem de tweede keer van 66 tot 90 PLUS 65 echoën![]()
Doet ie goed.quote:Overigens zegt iemand op 52 karakters te zitten.
Als je de { en } weghaalt zit je al op 62 tekensquote:Op vrijdag 28 oktober 2005 17:55 schreef Roonaan het volgende:
64 tekens
[ code verwijderd ]
Hij kan efficienter als je die nummers bij 0 kan laten starten tot 702. Alleen moeten dan de modulussen anders.
quote:Op vrijdag 28 oktober 2005 18:08 schreef Roonaan het volgende:
[ code verwijderd ]
57.
55 als je de sluittags weghaalt.
| 1 |
Waarom zou het een beetje schoon moeten blijvenquote:Op vrijdag 28 oktober 2005 18:27 schreef ikke_ook het volgende:
[Centraal]PHP - Golf wedstrijd
Daar kunnen jullie lekker verder spelen met jullie Golf, dan blijft dit topic een beetje schoon
-edit-
Oeps, ik zie dat ik dat topic onder de naam van mn vriendin heb gepost
| 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 | $arr = array(11 => array(13, 14, 15, 16, 17), 12 => array(13, 14, 15, 16, 17), 13 => array(11, 12, 16, 17), 14 => array(11, 12, 17), 15 => array(11, 12, 16, 17), 16 => array(11, 12, 13, 14, 15, 17), 17 => array(11, 12, 13, 14, 15, 16)); foreach ($arr as $id => $narr) { $tmpArr = $narr; if (isSet($remove) && is_array($remove)) { foreach ($remove as $x => $verwijderkey) { foreach ($tmpArr as $xx => $value) { if ($tmpArr[$xx] == $verwijderkey) { unset ($tmpArr[$xx]); } } } } if (is_array($tmpArr) && count($tmpArr) > 1) { $code = $tmpArr[rand(0, count($tmpArr)-1)]; } else { foreach ($tmpArr as $key => $value) { $code = $value; } } $remove[] = $code; echo 'gebruiker ' . $id . ' heeft gebruiker ' . $code . ' getrokken <br>'; } var_dump($remove); ?> |
| 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 | $arr = array("eric" => array("tess", "joop", "kees", "loes", "joke"), "marc" => array("tess", "joop", "kees", "loes", "joke"), "tess" => array("eric", "marc", "loes", "joke"), "joop" => array("eric", "marc", "joke"), "kees" => array("eric", "marc", "loes", "joke"), "loes" => array("eric", "marc", "tess", "joop", "kees", "joke"), "joke" => array("eric", "marc", "tess", "joop", "kees", "loes")); foreach ($arr as $id => $tmpArr) { if (isSet($remove) && is_array($remove)) { foreach ($remove as $x => $verwijderkey) { foreach ($tmpArr as $xx => $value) { if ($tmpArr[$xx] == $verwijderkey) { unset ($tmpArr[$xx]); } } } } if (is_array($tmpArr) && count($tmpArr) > 1) { $code = $tmpArr[rand(0, count($tmpArr)-1)]; } else { foreach ($tmpArr as $key => $value) { $code = $value; } } $remove[] = $code; echo 'gebruiker ' . $id . ' heeft gebruiker ' . $code . ' getrokken <br>'; } var_dump($remove); ?> |
| 1 2 3 4 5 6 7 8 | gebruiker marc heeft gebruiker tess getrokken gebruiker tess heeft gebruiker joke getrokken gebruiker joop heeft gebruiker eric getrokken gebruiker kees heeft gebruiker marc getrokken gebruiker loes heeft gebruiker kees getrokken gebruiker joke heeft gebruiker loes getrokken array(7) { [0]=> string(4) "joop" [1]=> string(4) "tess" [2]=> string(4) "joke" [3]=> string(4) "eric" [4]=> string(4) "marc" [5]=> string(4) "kees" [6]=> string(4) "loes" } |
| 1 2 3 4 5 6 7 8 9 10 11 12 | gebruiker marc heeft gebruiker joop getrokken gebruiker tess heeft gebruiker eric getrokken gebruiker joop heeft gebruiker marc getrokken gebruiker kees heeft gebruiker loes getrokken Notice: Undefined offset: 1 in d:\www\usersort.php on line 29 gebruiker loes heeft gebruiker getrokken Notice: Undefined offset: 0 in d:\www\usersort.php on line 29 gebruiker joke heeft gebruiker getrokken array(7) { [0]=> string(4) "joke" [1]=> string(4) "joop" [2]=> string(4) "eric" [3]=> string(4) "marc" [4]=> string(4) "loes" [5]=> NULL [6]=> NULL } |
| 1 |
Met je rand() ding ga je op zoek naar een key tussen 0 en het aantal keys. Da's leuk, maar als je als keys de getallen 1,3,5,7 overhoudt dan heb je 4 keys en een kans van 50% dat je een niet-bestaande key tussen 0 en 3 pakt.quote:Op zondag 30 oktober 2005 10:03 schreef Chandler het volgende:
maar ik check of de array reeds groter is dan 1 item, dan zou je toch verwachten dat dat goed gaat![]()
en als ik de regel (28) dus boven de code voorzie van > 2 dan krijg ik steeds mindervaak een error maar alsnog soms een error in regel 29
Help me!
| 1 2 3 4 5 6 7 8 9 10 11 | { $code = $tmpArr[rand(0, count($tmpArr)-1)]; } else { foreach ($tmpArr as $key => $value) { $code = $value; } } |
| 1 |
| 1 2 3 4 5 6 7 8 9 10 11 | { $code = $tmpArr[rand(0, count($tmpArr)-1)]; } else { foreach ($tmpArr as $key => $value) { $code = $value; } } |
| 1 2 3 4 5 6 7 8 9 | { $code = $tmpArr[array_rand($tmpArr)]; } else { echo 'Geen keuze beschikbaar voor '.$id.'<br>'; break; } |
| 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 | $arr = array("eric" => array("eric", "marc"), "marc" => array("marc", "eric"), "tess" => array("tess", "joop", "kees"), "joop" => array("joop", "tess", "kees", "loes"), "kees" => array("kees", "tess", "joop"), "loes" => array("loes"), "joke" => array("joke")); // build a second list. foreach ($arr as $name => $null) { $nArr[] = $name; } foreach ($arr as $id => $userRemove) { $userChoose = $nArr; // verwijder mensen uit lijst :) foreach ($userRemove as $xid => $name) { foreach ($userChoose as $userid => $username) { if (isSet($userRemove[$userid]) && $userRemove[$userid] == $name) { unset($userChoose[$userid]); } } } // verwijder reeds geselecteerde mensen uit lijst :) if (isSet($userSelected) && is_array($userSelected)) { foreach ($userSelected as $xxid => $name) { foreach ($userChoose as $uID => $tmp) { if (isSet($userChoose[$uID]) && $userChoose[$uID] == $name) { unset($userChoose[$uID]); } } } } $code = $userChoose[array_rand($userChoose)]; $userSelected[$id] = $code; echo 'gebruiker ' . $id . ' heeft gebruiker ' . $code . ' getrokken <br>'; } var_dump($userSelected); ?> |
| 1 2 3 4 5 6 7 8 9 10 | gebruiker marc heeft gebruiker kees getrokken gebruiker tess heeft gebruiker loes getrokken gebruiker joop heeft gebruiker joke getrokken gebruiker kees heeft gebruiker joop getrokken gebruiker loes heeft gebruiker marc getrokken Notice: Undefined index: in d:\www\usersort.php on line 49 gebruiker joke heeft gebruiker getrokken array(7) { ["eric"]=> string(4) "tess" ["marc"]=> string(4) "kees" ["tess"]=> string(4) "loes" ["joop"]=> string(4) "joke" ["kees"]=> string(4) "joop" ["loes"]=> string(4) "marc" ["joke"]=> NULL } |
Dan krijg je dat de variabele $code niet te gebruiken is bij het echo-statement even verderopquote:Op zondag 30 oktober 2005 17:32 schreef Darkomen het volgende:
Wat krijg je als je
$code = $userChoose[array_rand($userChoose)];
$userSelected[$id] = $code;
IN
$userSelected[$id] = $userChoose[array_rand($userChoose)];
veranderd?
Klinkt logisch, maar is geen garantie voor succes. Bij de laatste melding van Chandler liep het fout bij de laatste trekking, en dat is iemand met de ruimste keuze. En ik zie hier nog wel wat mogelijkheden voor functies als array_keys en in_array.quote:Op zondag 30 oktober 2005 22:52 schreef Roonaan het volgende:
Is het niet nuttiger om eerst de mensen te sorteren op het kleinst aantal mensen die ze mogen trekken, om te voorkomen dat ze op een gegeven moment niemand kunnen trekken, omdat die reeds getrokken zijn door andere, die in eerste instantie meer opties hadden?
-r-
Geen idee. Als ik het hier probeer gaat het wel goed. Weet je zeker dat die column NULL als default waarde heeft?quote:Op zondag 30 oktober 2005 23:14 schreef Swetsenegger het volgende:
Waarom geeft mijn mysql column, welke NULL enabled is, en NULL als default waarde heeft
0 terug wanneer ik geen waarde invul?
quote:Op zondag 30 oktober 2005 23:19 schreef Light het volgende:
[..]
Geen idee. Als ik het hier probeer gaat het wel goed. Weet je zeker dat die column NULL als default waarde heeft?
Omdat MySQL vol met bugs, inconsequenties en andere vreemde dingen zit. ACM had er een lijst van online staan.quote:Op zondag 30 oktober 2005 23:14 schreef Swetsenegger het volgende:
Waarom geeft mijn mysql column, welke NULL enabled is, en NULL als default waarde heeft
0 terug wanneer ik geen waarde invul?
Deze punten gaan vooral over versie 3.23.x, dat zal ook wel de reden zijn dat ie offline is.quote:Weird behaviour
1. You can define a varchar/char field 'auto_increment'.
2. SELECT 'A' = 'a' gets you true.
3. Int(10) is the same as int(1) eventhough the manual says differently.
4. Tablenames are treated case-sensitive on *n?x systems, not on windows.
5. Change a piece of a table definition and mysql creates a temporary copy of the table, very nice if you have a 6GB table occupying a 10GB tablespace... (yes, the change will fail)
6. Adding indices result in a similar temporary copy.
7. What does zerofill do to a integer field? A database is meant to store data, not to format it while storing.
8. When I define a char(32) (md5-strings anyone) field, I really don't mean varchar(32) (MySQL automatically changes all char(X >4) to varchar(X)).
9. This is correct according to mysql: SELECT a, b, count(c) FROM d GROUP BY a; what will MySQL do with the b?
10. If you update a record and set it to the same value, mysql'll define that as unaffected. Even if it does change a timestamp field.
Bugs
1. Insert a NULL value in a NOT NULL field and the query gets executed. In short, you can't force NOT NULL...
2. Under high loads MySQL will restart itself occasionally. When a child doesn't die fast enough "socket already in use"-error occurs.
3. Replication doesn't work that well.
4. MySQL will always try to insert a date into a date field, even if you supply an empty or bogus string (it'll insert 0000-00-00 then).
5. When underflowing or overflowing a integer field, mysql will insert the largest or smallest possible value instead.
6. Long texts are chopped to the correct size, not denied.
7. MySQL will also insert 0 into a numeric field if you supply an empty or bogus string.
8. Close a connection and a long query still runs on... The only way to kill it is via the (mysql)admin
9. Connections with a timeout? Very nice when you need to do a lot of calculations on your data or a query lasts very long. "Lost connection to MySQL server during query"
10. You can insert the same value twice in a ENUM-field
Ja die ken ik al van www.yapf.netquote:Op zondag 30 oktober 2005 23:35 schreef SuperRembo het volgende:
[..]
Omdat MySQL vol met bugs, inconsequenties en andere vreemde dingen zit. ACM had er een lijst van online staan.
[..]
Deze punten gaan vooral over versie 3.23.x, dat zal ook wel de reden zijn dat ie offline is.
Ik heb het geprobeerd op mysql 4.0.25 die ik hier lokaal had draaien. (Had, ik ben bezig met een upgrade nu.)quote:Op zondag 30 oktober 2005 23:28 schreef Swetsenegger het volgende:
[..]
[afbeelding]
Op welke versie heb jij het geprobeerd?
-edit- opgelost. in plaats van niets invullen gewoon NULL invullen
Een lege string is niet gelijk aan NULL.quote:Op zondag 30 oktober 2005 23:42 schreef Swetsenegger het volgende:
[..]
Ja die ken ik al van www.yapf.net
Maar er staat alleen wat over NULL invoeren in een NOT NULL kolom.
In mijn geval vul ik een lege string in, dus niets en daar maakt mysql 0 van.
Indien het veld in mijn form nu leeg is, vul ik dus maar NULL in. dat gaat wel goed
Daar was ik achter nuquote:Op zondag 30 oktober 2005 23:45 schreef Light het volgende:
[..]
Een lege string is niet gelijk aan NULL.
Bij MySQL is een hoop mogelijk, gezien wat ik zo lees.quote:Op zondag 30 oktober 2005 23:50 schreef SuperRembo het volgende:
Een lege string is zeker ook geen decimal.
(Er zit een typo in articelcode)
Een verdwijnende variabel, die ik idd niet bij het echo statement kan gebruikenquote:Op zondag 30 oktober 2005 17:32 schreef Darkomen het volgende:
Wat krijg je als je
$code = $userChoose[array_rand($userChoose)];
$userSelected[$id] = $code;
IN
$userSelected[$id] = $userChoose[array_rand($userChoose)];
veranderd?
Yep, dit is ff makkelijk en voor mij overzichtelijk...quote:Op zondag 30 oktober 2005 17:47 schreef Light het volgende:
Dan krijg je dat de variabele $code niet te gebruiken is bij het echo-statement even verderop
Ok, ik vond dit al een uitdaging, en nu dus helemaal... hoe in vredus naam kan ik dit snel doen? als het MySQL was dan was dit simpel, en kon ik de query aanpassen maar werken met array's is niet mijn sterkste vak..quote:Op zondag 30 oktober 2005 22:52 schreef Roïż½aïż½ het volgende:
Is het niet nuttiger om eerst de mensen te sorteren op het kleinst aantal mensen die ze mogen trekken, om te voorkomen dat ze op een gegeven moment niemand kunnen trekken, omdat die reeds getrokken zijn door andere, die in eerste instantie meer opties hadden?
-r-
hoe bedoel je dat? en waar denk jij dat mijn probleem zit? want ik kan dit helaas niet zo even 1234567890 uitvindenquote:Op zondag 30 oktober 2005 23:15 schreef Light het volgende:
Klinkt logisch, maar is geen garantie voor succes. Bij de laatste melding van Chandler liep het fout bij de laatste trekking, en dat is iemand met de ruimste keuze. En ik zie hier nog wel wat mogelijkheden voor functies als array_keys en in_array.
| 1 2 3 | "marc" => array("marc", "eric"), "tess" => array("tess", "joop", "kees"), |
Bij lootjes trekken heb je altijd het risico dat de laatste geen keuze meer heeft (of alleen zichzelf kan kiezen). Eigenlijk heb je die keuze altijd, maar je houdt er bij het programmeren al rekening mee dat iemand niet zichzelf mag kunnen kiezen. In je laatste voorbeeld was joke, die als laatste mag kiezen, nog niet gekozen. Enige overgebleven keuze is dus joke, maar die mag zichzelf niet kiezen, dus geen keuze. Oplossing is simpel de hele trekking nogmaals doen.quote:Op maandag 31 oktober 2005 07:42 schreef Chandler het volgende:
hoe bedoel je dat? en waar denk jij dat mijn probleem zit? want ik kan dit helaas niet zo even 1234567890 uitvindenheb gisteren (tijdens het ziek zijn) de hele dag niets anders in me hoofd gehad dan de niet werkende code...
Mjah,quote:Op maandag 31 oktober 2005 01:04 schreef Light het volgende:
Hmm.. Men neme een simpele tabel "tabel" met twee kolommen "col1" en "col2". Col2 is gedefinieerd als INT en mag NULL bevatten. Col1 is gewoon een ID. (Het gaat nergens over, maar ter illustratie.)
Dan doen we "Insert into tabel (col1, col2) values (1, '')" waarbij dus een lege string naar col2 gezet wordt. Maar dat was een int. Voor MySQL een reden om er dan maar 0 van te maken.
Overigens gebeurt hetzelfde als ik een niet-lege string gebruik. De conversie lijkt hetzelfde te zijn als de (int) van 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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | $vorigeTrekking = array( "eric" => array("eric", "marc"), "marc" => array("marc", "eric"), "tess" => array("tess", "joop", "kees"), "joop" => array("joop", "tess", "kees", "loes"), "kees" => array("kees", "tess", "joop"), "loes" => array("loes"), "joke" => array("joke") ); $alleDeelnemers = array_keys($vorigeTrekking); // Wie mag wie wél loten $magLoten = array(); foreach($alleDeelnemers as $naam) { $magLoten[$naam] = array_diff($alleDeelnemers, $vorigeTrekking[$naam]); } // Wie mag door wie geloot worden $magGelootWordenDoor = array(); foreach($magLoten as $naam => $loten) { foreach($loten as $lot) $magGelootWordenDoor[$lot][] = $naam; } // Trekking doen. ob_start etc is om de data van // mislukte trekkingen te verbergen $i = 1; ob_start(); $loting = loting($alleDeelnemers, $magLoten, $magGelootWordenDoor); while(!is_array($loting) && $i < 10) { ob_end_clean(); echo '<br/>Trekking '.$i++.' mislukt: '.$loting; flush(); ob_start(); $loting = loting($alleDeelnemers, $magLoten, $magGelootWordenDoor); } ob_end_flush(); // Loting functie function loting($alleDeelnemers, $magLoten, $magGelootWordenDoor) { // Alle loten zijn getrokken if(count($alleDeelnemers) < 1) { return array(); } // Kies een van de deelnemers die als volgende een lootje mag trekken shuffle($alleDeelnemers); $deelnemer = array_pop($alleDeelnemers); // Geef de naam weer echo '<br/><b>'.$deelnemer.'</b>'; // Tijdelijke arrays construeren om de intersectie te kunnen maken tussen // de loten die iemand mag trekken en de nog beschikbare loten $dnMagLoten = $magLoten[$deelnemer]; $dnKanLoten = array_keys($magGelootWordenDoor); $dnLoten = array_intersect($dnMagLoten, $dnKanLoten); if(count($dnLoten) < 1) { return '<br/>Loting mislukt.'; } else { // Volgende drie regels zijn debug informatie echo '<br/>Mag: '.implode(',',$dnMagLoten); echo '<br/>Kan: '.implode(',',$dnKanLoten); echo '<br/>Som: '.implode(',',$dnLoten); // Trek een van de loten $getrokken = $dnLoten[array_rand($dnLoten)]; // Geef een echo welk lot is getrokken echo '<br/><b>'.$deelnemer.' trekt '.$getrokken.'</b><br/>'; } // De deelnemer kan niet nog een keer loten unset($magLoten[$deelnemer]); // Het lot kan ook niet meer getrokken worden unset($magGelootWordenDoor[$getrokken]); // Recursief andere mensen laten trekken $loting = loting($alleDeelnemers,$magLoten, $magGelootWordenDoor); // Kijken of de recursieve loting goed verlopen is if(is_array($loting)) { $resultaat = array_merge(array($deelnemer => $getrokken),$loting); return $resultaat; } else { return $loting; } } ?> |
Afgezien van dit belachelijke gedrag van MySQL (quote:Op maandag 31 oktober 2005 08:39 schreef Swetsenegger het volgende:
[..]
Mjah,
Laten we zeggen dat ik verwacht dat wanneer ik een lege string naar een decimal stuur met als default value NULL dat ik dan ook NULL terug krijg
Het was weer een wijze les
@Roïż½aïż½quote:Op maandag 31 oktober 2005 09:54 schreef Roïż½aïż½ het volgende:
Nou, ik was in de veronderstelling dat je bij een INSERT statement alle kolommen moest benoemenquote:Op maandag 31 oktober 2005 10:50 schreef JeRa het volgende:
[..]
Afgezien van dit belachelijke gedrag van MySQL (); waarom probeerde je een string naar een decimal te sturen?
| 1 2 3 4 | { unSet($includeUsers[$id]); } |
| 1 2 3 4 5 6 7 8 9 | PHP if (!isset($_COOKIE[$_GET['link']])) { echo"blabla"; setcookie("$_GET[link]", "true", strtotime("tomorrow 0"), "/"); } ?> |
array_intersect geeft alleen de waarde terug die in beide arrays voorkomen.quote:Op maandag 31 oktober 2005 13:56 schreef Chandler het volgende:
@Roonaan: ik ben nu al een tijd bezig je functie te ontleden maar heb een vraag en kan daar niet een begrijpelijk antwoord op vinden op www.php.net
waar staan de volgende functie voor!
array_intersect ? want uit de uitleg en voorbeeld kom ik niet
| 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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | $vorigeTrekking = array("eric" => array("eric", "marc"), "marc" => array("marc", "eric"), "tess" => array("tess", "joop", "kees"), "joop" => array("joop", "tess", "kees", "loes"), "kees" => array("kees", "tess", "joop"), "loes" => array("loes"), "joke" => array("joke")); $alleDeelnemers = array_keys($vorigeTrekking); $lootenSelect = array(); $includeUsers = array(); $over = array(); echo '<pre>'; for ($x = 0; $x < 100; $x++) { $doBreak = true; foreach ($vorigeTrekking as $kiesUser => $excludeUsers) { // bereken users die niet mag kiezen $includeUsers = $alleDeelnemers; $over = $alleDeelnemers; foreach ($excludeUsers as $id => $value) { foreach ($over as $fID => $fName) { if ($fName == $value) { unSet($over[$fID]); } } } echo '<br>'; foreach ($lootenSelect as $id => $value) { foreach ($over as $fID => $fName) { if ($fName == $value) { unSet($over[$fID]); } } } echo 'user : ' . $kiesUser . "<br /><br /><br />"; echo 'mag niet kiezen : ' . implode(", ", $excludeUsers) . "<br />"; echo 'mag wel kiezen : ' . implode(", ", $includeUsers) . "<br />"; echo 'reeds gekozen : ' . implode(", ", $lootenSelect) . "<br />"; echo 'blijft over : ' . implode(", ", $over) . "<br />"; if (count($over) > 0) { $rnd = $alleDeelnemers[array_rand($over)]; echo 'random : ' . $rnd . "<br>"; $lootenSelect[$kiesUser] = $rnd; echo '<hr>'; } else { echo 'random : geen mogelijkheid meer over, start over'; $doBreak = false; } } if ($doBreak == true) { break; } } echo '</pre>'; echo 'selected users'; echo '<pre>'; var_dump($lootenSelect); echo '</pre>'; ?> |
Ik heb het opgelost! Voor de nieuwsgierigen, er kwam een "." voor in de meegestuurde GET waarde. Het cookie lijkt onmogelijk uit te lezen door die punt.quote:Op maandag 31 oktober 2005 14:09 schreef Pronk het volgende:
Ik heb een probleem met cookies die moeten worden geplaatst en uitgelezen aan de hand van de GET waarde die aan een de pagina wordt meegegeven.
[ code verwijderd ]
Het cookie wordt wel geplaatst (met de juiste waarde)
Als ik nu nog een keer dezelfde GET waarde aan de pagina mee geef dan zou er geen "blabla" op mijn scherm mogen verschijnen.
Dit gebeurt wel, dus het cookie wordt toch niet goed uitgelezen.
Heeft iemand een idee waarom dit fout gaat?
Zolang PHP nog steeds crasht als je een recursieve functie op wat grotere datasets uitvoert (stack overflow) wijk ik toch uit naar andere talen om een aanpak te testenquote:Op maandag 31 oktober 2005 15:23 schreef Roïż½aïż½ het volgende:
Tevens ben ik nog steeds overtuigd dat een recursieve aanpak hiervoor beter is.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $NextDir = "klein.php?dir=".$DirArray[$DirIndex + 1]; $PrevDir = "klein.php?dir=".$DirArray[$DirIndex - 1]; $NextDirNam = $DirArray[($DirIndex + 1)]; $PrevDirNam = $DirArray[($DirIndex - 1)]; if ($DirIndex == 0) { $PrevDir = "klein.php?dir=".$DirArray[(Count($DirArray) - 1)]; $PrevDirNam = $DirArray[(Count($DirArray) - 1)]; } if (($DirIndex + 1) > (Count($DirArray) - 1)) { $NextDir = "klein.php?dir=".$DirArray[0]; $NextDirNam = $DirArray[0]; ?> |
| 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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | <HTML> <HEAD> <TITLE>Fotoalbum</TITLE> </HEAD> <BODY TEXT='#000000' LINK='#000000' VLINK='#000000' ALINK='#000000'> <TABLE WIDTH='800' BORDER='1' bordercolor='#FFFFFF' CELLSPACING='0' CELLPADDING='0' ALIGN='CENTER'> <TR> <TD bordercolor='#000000' bgcolor='#CCCCCC'><CENTER><STRONG>Foto overzicht: <? echo"$_GET[dir]"; ?></STRONG></CENTER></td> </TR> </TABLE> <? function getDirList ($dirName) { static $result_array=array(); $d = dir($dirName); while($entry = $d->read()) { if ($entry != "." && $entry != "..") { if (is_dir($dirName."/".$entry)) { array_push($result_array,$entry); } } } $d->close(); sort($result_array); return $result_array; } function getDirContents ($dirName) { static $result_array=array(); $d = dir($dirName); while($entry = $d->read()) { if ($entry != "." && $entry != "..") { if (!is_dir($dirName."/".$entry)) { str_replace(" ", "[spc]",(str_replace("&", "[amp]",$entry))); array_push($result_array,$entry); } } } $d->close(); sort($result_array); return $result_array; } $DirArray = getDirList("./"); for($i=0; $i < count($DirArray); $i++) { if($_GET['dir']==$DirArray[$i]) { $DirIndex = $i; } } $NextDir = "klein.php?dir=".$DirArray[$DirIndex + 1]; $PrevDir = "klein.php?dir=".$DirArray[$DirIndex - 1]; $NextDirNam = $DirArray[($DirIndex + 1)]; $PrevDirNam = $DirArray[($DirIndex - 1)]; if ($DirIndex == 0) { $PrevDir = "klein.php?dir=".$DirArray[(Count($DirArray) - 1)]; $PrevDirNam = $DirArray[(Count($DirArray) - 1)]; } if (($DirIndex + 1) > (Count($DirArray) - 1)) { $NextDir = "klein.php?dir=".$DirArray[0]; $NextDirNam = $DirArray[0]; } ?> <TABLE WIDTH='800' BORDER='0' CELLSPACING='0' CELLPADDING='0' ALIGN='CENTER'> <tr> <td width='33%' valign='top'><table width='100%' height='50' bordercolor='#FFFFFF' border='1' cellspacing='0' cellpadding='3'><tr><td style='CURSOR: hand' onMouseover="this.bgColor='#CCCCCC'" onMouseout="this.bgColor='#FFFFFF'" onclick="window.location='<?echo"$PrevDir";?>';" valign='top' bordercolor='#000000'><?echo str_replace(".", " ",$PrevDirNam);?></td></tr></table><td> <td width='33%' valign='top'><table width='100%' height='50' bordercolor='#FFFFFF' border='1' cellspacing='0' cellpadding='3'><tr><td style='CURSOR: hand' onMouseover="this.bgColor='#CCCCCC'" onMouseout="this.bgColor='#FFFFFF'" onclick="window.location='index.php';" valign='top' align="center" bordercolor='#000000'>Terug naar het album overzicht</td></tr></table><td> <td width='33%' valign='top'><table width='100%' height='50' bordercolor='#FFFFFF' border='1' cellspacing='0' cellpadding='3'><tr><td style='CURSOR: hand' onMouseover="this.bgColor='#CCCCCC'" onMouseout="this.bgColor='#FFFFFF'" onclick="window.location='<?echo"$NextDir";?>';" valign='top' bordercolor='#000000'><?echo str_replace(".", " ",$NextDirNam);?></td></tr></table><td> </tr> </TABLE> <table width="800" border='0' cellspacing='0' cellpadding='0' align="center"><tr> <? $Column = 1; $DirName = $DirArray[$DirIndex]; $CurrentDir = "./".$DirName; $DirContents = getDirContents($CurrentDir); for($i=0; $i < count($DirContents); $i++) { echo "<td height='140' width='20%'><table width='100%' height='100%' bordercolor='#FFFFFF' border='1' cellspacing='0' cellpadding='3'><tr><td height='100%' style='CURSOR: hand' onMouseover=\"this.bgColor='#CCCCCC'\" onMouseout=\"this.bgColor='#FFFFFF'\" onclick=\"window.location='groot.php?dir=".str_replace(" ", "[spc]",(str_replace("&", "[amp]",$DirName)))."&image=".str_replace(" ", "[spc]",(str_replace("&", "[amp]",$DirContents[$i])))."&index=".$i."';\" valign='top' align='center' bordercolor='#000000'><img vspace='10' width='125' border='0' src='".$CurrentDir."/".$DirContents[$i]."'></td></tr></table></td>"; if($Column==5) { $Column = 0; echo "</tr>"; } $Column++; } if($Column != 0) { for($i=$Column; $i<8;$i++){ echo "<td>"; } } echo "</table>"; ?> </BODY></HTML> ?> |
Dit heb ik nagekeken en dit klopt natuurlijk helemaal, maar wat kan ik nu doen om te zorgen dat die 'notice' verdwijnt. Dus hoe kan ik zorgen het script van te voren weet dat het niet verder of terug moet tellen?quote:Op woensdag 2 november 2005 11:19 schreef SuperRembo het volgende:
Als $DirIndex = 0 is, dan krijg je hier $DirArray[$DirIndex - 1] die notice op. De array begint bij 0, dus -1 bestaat niet. Logisch.
Door bv dit te doen:quote:Op woensdag 2 november 2005 11:57 schreef Pronk het volgende:
[..]
Dit heb ik nagekeken en dit klopt natuurlijk helemaal, maar wat kan ik nu doen om te zorgen dat die 'notice' verdwijnt. Dus hoe kan ik zorgen het script van te voren weet dat het niet verder of terug moet tellen?
| 1 2 3 | $PrevDir = "klein.php?dir=".$DirArray[$DirIndex - 1]; } |
| 1 2 | <?php $Bericht[] = array('Thomas','iemand@hotmail.com',' ','Hoogkerk','14-09-2004 23:16:05','Berichtje'); ?> |
| 1 2 3 4 5 6 7 8 | for($i=0;$i<count($Bericht);$i++){ $query = "INSERT INTO messages (name,email,bla,woonplaats,date,message) VALUES ('".$Bericht[$i][0]."','".$Bericht[$i][1]."','".$Bericht[$i][2]."', '".$Bericht[$i][3]."','".$Bericht[$i][4]."','".$Bericht[$i][5]."')"; mysql_query($query)or die(mysql_error()); } ?> |
| 1 2 | 'Thomas','iemand@hotmail.com',' ','Hoogkerk','14-09-2004 23:16:05','Berichtje' |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $array=file(berichten.txt); //Hiermee zet hij je txt file in een array, waarbij elke regel een element is. foreach ($array as $line){ //Hiermee stap je door de array heen $line=str_replace(''','',$line); //hiermee haal je de ' weg $stuk=explode(',',$line); //hiermee verdeel je de regel in losse elementen $query="INSERT INTO database (id,naam,email,iets,woonplaats,datum,bericht) VALUES(0,'".$stuk[0]."','".$stuk[1]."','".$stuk[2]."','".$stuk[3]."','".$stuk[4]."','".$stuk[5]."')"; mysql_query($query); // naar database schrijven } ?> |
Voor $NextDir moet je een zelfde soort controle inbouwen (voor als je aan het eind van de lijst bent).quote:Op woensdag 2 november 2005 12:37 schreef Pronk het volgende:
Nouja, misschien niet de netste manier maar mijn notices zijn weg! Thx!
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |