Samengestelde variabele aanmaken via iteratie
Ik wil een iteratie doorlopen waarbij de variabele naam zich steeds aanpast volgens het index nr. Hoe dat doe je dat met php?
Bv. ik heb een aantal sportvelden. en nu wil ik het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
for ($v = 0; $v < $aantal_velden; $v++) {
//Voor ieder veld een separate query via index. Dan kan het in een for loop.
//Alternatief is natuurlijk alles uitschrijven
$Q0_v.$v = "SELECT * FROM tabelnaam
where field =".$v;
$R0_v.$v = mysql_query($Q0_v.$v) or die(mysql_error());
$A0_v.$v = mysql_fetch_array($R0_v.$v);
$C0_v.$v = mysql_num_rows($R0_v.$v);
}
?>
for ($v = 0; $v < $aantal_velden; $v++) {
//Voor ieder veld een separate query via index. Dan kan het in een for loop.
//Alternatief is natuurlijk alles uitschrijven
$Q0_v.$v = "SELECT * FROM tabelnaam
where field =".$v;
$R0_v.$v = mysql_query($Q0_v.$v) or die(mysql_error());
$A0_v.$v = mysql_fetch_array($R0_v.$v);
$C0_v.$v = mysql_num_rows($R0_v.$v);
}
?>
en dan bv. van een bep. de starttijd uitvragen
Ik het nu via een .$v weergegeven.
Ik heb wel een soort alternatief werken met een parameter als test:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$tmp = 'parameter_naam_'.$v
//Nu wordt de waarde van $parameter_naam_3 bv. getoond
echo $$tmp;
?>
$tmp = 'parameter_naam_'.$v
//Nu wordt de waarde van $parameter_naam_3 bv. getoond
echo $$tmp;
?>
Maar dan moet ik eert tmp variabele aanmaken. Het moet toch ook 'rechtstreeks' kunnen?
Ik hoop dat mijn vraag duidelijk is (het is al laat).
Alvast bedankt.
Mvg.,
Nico
in php is de . de operator om strings aan elkaar te plakken. Dit is in jou geval niet echt nuttig. Je weet dat je ook een hele reeks rijen uit kan lezen op een andere manier?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?PHP
$query="SELECT * FROM tabelnaam";
$result=mysql_query($query);
$num_rows=mysql_num_rows();
$rows=array();
while($row=mysql_fetch_assoc()){
$rows[]=$row;
}
//$rows bevat nu alle rijen als een multidimensionale array. Uitlezen kan met foreach
?>
$query="SELECT * FROM tabelnaam";
$result=mysql_query($query);
$num_rows=mysql_num_rows();
$rows=array();
while($row=mysql_fetch_assoc()){
$rows[]=$row;
}
//$rows bevat nu alle rijen als een multidimensionale array. Uitlezen kan met foreach
?>
Over arrays:
http://nl.php.net/manual/en/language.types.array.php
Als je echt allemaal losse queries maakt zoals nu, krijg je steeds maar een rij terug. Omdat je het toch allemaal uit dezelfde tabel haalt (zo te zien), volstaat de bovenstaande code. Het heeft dan ook meer zin om mysql_num_rows te doen.
Ik raad je aan om deze twee links eens grondig te bekijken:
http://www.phptuts.nl/view/39/
http://www.phptuts.nl/view/41/
Edit:
Wil je alleen een bepaald aantal, dan moet je eens kijken naar ORDER BY (google is your friend!) en LIMIT (allebei MySQL)
Wil je alleen een bepaald aantal, dan moet je eens kijken naar ORDER BY (google is your friend!) en LIMIT (allebei MySQL)
Gewijzigd op 05/09/2010 01:40:08 door SilverWolf NL
$row['parameter_naam_'.$v] is mogelijk.
Ik dacht dat dit werkte:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$tmp = 'parameter_naam_'.$v
//Nu wordt de waarde van $parameter_naam_3 bv. getoond
echo ${$tmp};
?>
$tmp = 'parameter_naam_'.$v
//Nu wordt de waarde van $parameter_naam_3 bv. getoond
echo ${$tmp};
?>
Misschien werkt dit dan ook:
Maar wie weet ook niet. Ik kan even niet meer testen (ik was bezig mijn computer uit te zetten..)
't Is een suggestie, maar ik raad je toch sterkt aan om arrays te gebruiken; veel makkelijker.
Edit:
Ik heb dit getest en dit lost hij op als array... Dus $C0_v = array($v => mysql_num_rows($R0_v[$v]))
Gewijzigd op 05/09/2010 12:47:57 door Mark L
Ik heb een zaal definitie met meerdere velden. Nu ben ik iets voor de trainingen aan het realiseren en heb ik voor ieder veld een aparte resultaat set nodig omdat ik 'grafisch' een soort overzicht wil maken. Maar omdat ik de velden naast elkaar wil tonen heb ik resultaat sets 'parallel' (gelijktijdig) op ieder tijdstip nodig.
Maar dit wil ik dynamisch. Ik bedoel als er een andere zaal definitie is moet het ook nog werken. Het moet zo-wie-zo niet in één array. Maar misschien mis ik nog iets.
EDIT:
Volgens mij ben ik eruit door de resultsets in een array te drukken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$Q0_v[$v] = "select *
from zaaldefinitie
where vldn =".$v;
$R0_v[$v] = mysql_query($Q0_v[$v]) or die(mysql_error());
$A0_v[$v] = mysql_fetch_assoc($R0_v[$v]);
$C0_v[$v] = mysql_num_rows($R0_v[$v]);
for ($v = 0; $v < 5; $v++) {
echo 'Veld omschrijving: '.$A0_v[$v]['desc'].'<br/>';
}
?>
$Q0_v[$v] = "select *
from zaaldefinitie
where vldn =".$v;
$R0_v[$v] = mysql_query($Q0_v[$v]) or die(mysql_error());
$A0_v[$v] = mysql_fetch_assoc($R0_v[$v]);
$C0_v[$v] = mysql_num_rows($R0_v[$v]);
for ($v = 0; $v < 5; $v++) {
echo 'Veld omschrijving: '.$A0_v[$v]['desc'].'<br/>';
}
?>
Dit volstaat voor dit moment en kan ik hiermee uit de voeten.
Nico
Nico
Gewijzigd op 05/09/2010 17:25:57 door nkamp Kamp van de