PHP: Dynamiska variabelnamn?

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Boden
  • 2012-09-26 14:10

Hej.

Jag har 21 variabler: $numkat1, $numkat2, $numkat3 osv. Jag använder dessa för att räkna antalet inlägg i en viss kategori.

När man skapar ett inlägg genereras en varchar utifrån vilka kategorier inlägget passar i. Exempel: 1,5,7
Nu vill jag plussa på dessa genom att loopa igenom inläggen. Jag gör som följer:

while($row = mysql_fetch_array($result)){
	$kats = explode(',',$row[kat]);
				
	foreach ($kats as $value)
	    {
		$numkat+$value +=1; <--- här vill jag att $numkat+rätt nummer ska plussas med ett
	    }
	}

Förenklat:
Jag har $num och $namn. $num=5 och $namn=namn. Hur gör jag för att kombinera dessa så det blir $namn5?

Tacksam för svar

  • Medlem
  • Göteborg
  • 2012-09-26 15:08

Inte för att jag har någon koll på PHP, men ditt upplägg med 21 variabler för att räkna inlägg i kategorier är lite tokigt. Vad du egentligen borde använda är en map (sk associative array). $row nedan ser ut att vara en sådan och den kan du ju redan jobba med så det borde inte vara några konstigheter.

Efter lite phpsyntaxgooglande borde det funka ungefär såhär applicerat på ditt exempel:

$numkat = array();
while($row = mysql_fetch_array($result)) {
   $kats = explode(',',$row[kat]);
   foreach ($kats as $value) {
      if (!isset($numkat[$value])) {
         $numkat[$value] = 0;
      }
      $numkat[$value] +=1;
   }
}

efter den snurran har du alltså en "array" med alla kategoriers inläggsantal. Skulle du lägga till ytterligare kategorier behöver du inte ändra någon kod. Du kommer åt inläggsantalet för en kategori med

$numkat[$namnEllerIdEllerVadNuValueVarOvan]

alltså på samma vis som du använder $row[kat] i ditt eget exempel.

...och jag kan inget om PHP så eventuella följdfrågor kan jag nog inte svara på. Bara googla. Och det kan du också. Hoppas jag petat dig i rätt riktning.

Sen är det nog värt att kolla på normaliseringen utav databasen. Att lagra flera ID'n i samma kolumn blir väldigt bökigt, och kan i förlängningen bli långsamt. Då kan du också få databasen att göra jobbet åt dig, att få fram antalet inlägg per kategori är enkelt mha count() & group by.

Jag försökte läsa koden men varningsklockorna som säger att det handlar om att kompensera för en bristfällig datamodell ringer.

Skulle inte en enkel uppdelning med tre tabeller, kategori, inlägg, mappning, lösa hela problemet på ett mycket enklare och flexiblare sätt?

1
Bevaka tråden