Gå til innhold

bruke variabel som nøkkel i array, feil oppstår


Anbefalte innlegg

Hei,

jeg prøver å legge inn en variabel som nøkkel i et array, men da oppstår det en feil:

$rad = mysql_fetch_array($resultat);
$nr1 = (int) $rad['nr1'];
$nr2 = (int) $rad['nr2'];
$nr3 = (int) $rad['nr3'];
$nr4 = (int) $rad['nr4'];
$nr5 = (int) $rad['nr5'];

$sum = $nr1 + $nr2 + $nr3 + $nr4 + $nr5;

$nr1p = $nr1 * 100 / $sum;
$nr2p = $nr2 * 100 / $sum;
$nr3p = $nr3 * 100 / $sum;
$nr4p = $nr4 * 100 / $sum;
$nr5p = $nr5 * 100 / $sum;

$matrise = array(
$nr1p => 'Alternativ nr. 1 i poll',
$nr2p => 'Alternativ nr. 2 i poll',
$nr3p => 'Alternativ nr. 3 i poll',
$nr4p => 'Alternativ nr. 4 i poll',            
$nr5p => 'Alternativ nr. 5 i poll'
);  
                      
ksort($matrise);
$matrise = array_reverse($matrise);

$nr = 1;
echo "<table id='tabell' cellspacing='0'>\n";
echo "<tr>\n<th colspan='3'>Hvem skal jeg tegne neste gang?</th>\n</tr>\n";
foreach($matrise as $key => $value) {
echo "<tr>\n<td id='tall'>$nr</td>\n<td id='celle'>$value</td>\n<td id='celle2'>$key%</td>\n</tr>\n\n";
$nr++;
}
$person = ($sum == 1) ? "stemme" : "stemmer";
echo "<tr><td colspan='3' id='colspan'>$sum $person totalt</td></tr>";
echo "</table>\n";

 

dette er altså da koden for å hente ut 5 verdier som ligger i samme rad i en tabell. Alt funker fint hvis jeg bytter ut f. eks. $nr1p med tallet 1 og så videre.

 

Hvordan kan jeg få den til å forstå at det er variabelens verdi jeg vil ha som nøkkel?

Endret av hockey500
Lenke til kommentar
Videoannonse
Annonse

$matrise = array();
$matrise[$nr1p] = "Alternativ nr. 1 i poll"; 
$matrise[$nr2p] = "Alternativ nr. 2 i poll"; 
$matrise[$nr3p] = "Alternativ nr. 3 i poll"; 
$matrise[$nr4p] = "Alternativ nr. 4 i poll"; 
$matrise[$nr5p] = "Alternativ nr. 5 i poll"; 

 

Hvis jeg forstod deg riktig.. :roll:

Lenke til kommentar

nei, ikke helt. :no:

 

jeg oppretter en assosiativ matrise. en assosiativ matrise kan se f. eks. slik ut:

$array = array(
"nøkkel" => "verdi",
"nøkkel2" => "verdi2,
"nøkkel3" => "verdi3");

foreach($array as $nokkel => $verdi)
echo $nokkel. " -> " .$verdi ."<br>";

 

resultatet av den koden skulle da bli:

nøkkel -> verdi

nøkkel2 -> verdi2

nøkkel3 -> verdi3

 

jeg vil at det skal skje. men jeg vil ha en variabel som nøkkel. Det må da være mulig å opprette et array med variabler som nøkler. Jeg vil altså ikke hardkode nøklene, det vet jeg funker. men jeg vil ha en nøkkel til å bli f.eks. "blablabla" hvis variabelen $nokkel = "blablabla".

 

så jeg vil at disse kodene skal gi samme resultat:

$array = array(
"bla" => "verdi",
"blabla" => "verdi2,
"blablabla" => "verdi3");

foreach($array as $nokkel => $verdi)
echo $nokkel. " -> " .$verdi ."<br>";

$nøkkel = "bla";
$nøkkel2 = "blabla";
$nøkkel3 = "blablabla";

$array = array(
"$nøkkel" => "verdi",
"$nøkkel2" => "verdi2,
"$nøkkel3" => "verdi3");

foreach($array as $nokkel => $verdi)
echo $nokkel. " -> " .$verdi ."<br>";

 

det må da ha vært enkelt å forstå :yes:

Lenke til kommentar

Saken er at det er helt feil bygd opp.

 

Et eksempel:

$nr1p = 50*100/162;
echo $nr1p;

 

Dette gir summen 37.878787878788, så hvis du gjør følgende:

 

$matrise = array($nr1p => 'Alternativ nr. 1 i poll');
print_r($matrise);

 

Så vil du se at den kutter ut desimalene og nøkkel blir da 37. Array ( [37] => Alternativ nr. 1 i poll ).

 

Du må gjøre følgende for å definere at det er en string du setter som nøkkel:

$matrise = array(sprintf("%s",$nr1p) => 'Alternativ nr. 1 i poll');
print_r($matrise);

 

Men er er det et problem som du ikke har tenkt på. Hva vis $nrp1 og $nrp4 får samme nøkkel, da vil $nrp4 overskrive $nrp1.

Lenke til kommentar

så det var derfor bare noen av dem viste seg :blush:. straks jeg endret nøklene til 1, 2, 3, 4 og 5 gikk det fint.

 

jeg fiksa problemet med at det ble mange desimaler enkelt og greit ved å fjerne " rundt variablene i nøklene. problemet med at de overskriver hverandre var også greit å fikse. bare legge til en bokstav ved slutten av nøkkelen:

$matrise = array(
$nr1p."a" => "1",
$nr2p."b" => "2",
$nr3p."c" => "3",
$nr4p."d" => "4",            
$nr5p."e" => "5");	

og så konvertere til int igjen inni foreach løkka. men selv denne løsningen hadde et problem. jeg vil ikke kunne sortere den riktig lenger.

Endret av hockey500
Lenke til kommentar

Jeg forstår ikke hvorfor du skal ha verdien som nøkkel. Det hadde vært mye bedre om du snudde på det, slik at du fikk sortert det riktig og koden blir enklere

 

$matrise = array(
"1" => $nr1p,
"2" => $nr2p,
"3" => $nr3p,
"4" => $nr4p,
"5" => $nr5p);
rsort($matrise);

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...