RE: [PHP] New problem - preg_match?
| From: | Ford, Mike [LSS] | Date: | Thu, 19 Sep 2002 14:44:52 +0000 |
| Subject: | RE: [PHP] New problem - preg_match? | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-116887@lists.php.net to get a copy of this message | ||
> -----Original Message-----
> From: Chad Winger [mailto:cwinger@callistonet.com]
> Sent: 19 September 2002 06:25
>
> Still using my text file example, which has lines such as:
>
> 0706010102|01.01.02|16:00|Serie C2|02|Forlì|Florentia Viola|
> 0610010102|01.07.02|16:00|Serie C2|05|Florentia Viola|Gubbio|
> 1806190702|19.07.02|16:00|Serie C2|05|Savona|Florentia Viola|
>
> so Now i wanted to compare $getdate[1] to $datetest and if any of the
> exploded arrays from $getdate[1] matched up with $getdate,
> i.e. what is
> being submitted from the form, then it would not go to write the file.
>
A quick inspection prompts the following comments:
(1) *please* indent your code to reflect its structure -- makes it so much
easier to read!
(2) Why re-calculate $datetest on each iteration of the loop? Do it once
before you start looping.
(3) There's no need to use something as complex as ereg: as you're checking
for simple equality, a simple == will do!
(4) It's bad practice to open the file for writing whilst you've still got
it open for reading: I'd suggest completing the scan of existing entries
(taking care to remember whether it found a duplicate or not!), then close
the file, re-open it in *append* mode (not write) and just add the single
new line. (The other option would be to use read-write mode ('a+') and
fseek() as appropriate; personally I would regard this as more error prone
for very little performance gain, but YMMV.)
A quick rewrite taking these points into account gives:
$fd = fopen ($schedule, "r");
$datetest = ("$day.$month.$year");
$is_new_date = TRUE; // assume this to begin with
while (!feof ($fd)):
$currentlines = fgets($fd, 4096);
$getdate = explode("|", $currentlines);
if ($getdate[1] == $datetest):
echo 'date already listed';
$is_new_date = FALSE;
break; // break out of while loop
endif;
endwhile;
fclose($fd);
if ($is_new_date):
$fp = fopen($schedule, "a");
fwrite($fp,
"\n$homename[0]$awayname[0]$day$month$year|$day.$month.$year|$matchtime|$com
petition|$round|$homename[1]|$awayname[1]|");
fclose($fp);
echo 'success';
endif;
Hope this helps.
Cheers!
Mike
---------------------------------------------------------------------
Mike Ford, Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Beckett Park, LEEDS, LS6 3QS, United Kingdom
Email: m.ford@lmu.ac.uk
Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211