Autor Zpráva
q
Profil *
Dobrý den, snažím se udělat výpis z databáze, který bude předávat data do jednotlivých polí a kde každé pole bude mít číslo o jednu větší, které bude sloužit jako identifikátor.

Nefunkční kód:
$identifikator = "1";
while($radek = $vysledek->fetch_assoc())
{
$identifikator++; 
$vysledek[$radek[$identifikator]] = $radek;
}
var_dump($vysledek);


var_dump by měl vrátit něco takového:
array
  '1' => 
    array
      'jmeno' => string 'Petr' (length=4)
      'id' => string '1' (length=1)

array
  '2' => 
    array
      'jmeno' => string 'Pavel' (length=5)
      'id' => string '1' (length=1)


Mohou nastat nějaké problémy, pokud použiji výše uvedený příklad jako identifikátor? Napadlo mě ještě jiné řešení: pokud zavolám například fetch("id"), použije se jako identifikátor pole "id" z databáze, pokud ale zavolám fetch() použije se výše uvedený příklad, kde identifikátor bude číslo vždy o jedno větší. Nejsem si ale jistý jestli je to chytré něco takového používat.
q
Profil *
Omlouvám se, zapomněl jsem přidat chybovou hlášku výše uvedeného kódu:
Notice: Undefined index: 1 in ...
Dunalnel
Profil
q:
Je to zcela logické, protože v proměnné $radek, máš jen 1 řádku z tabulky a tá má index pravděpodobně id a jmeno, a ty po té řádce žádáš index 1, který logicky neexistuje.
q
Profil *
Ano, vůbec jsem si toho nevšiml. Děkuji

Mohu se zde ještě zeptat jestli je takovýto kód dobře napsaný nebo to lze napsat ještě lépe (jen v rámci toho aby jsem věděl v čem dělám chyby a co lze napsat lépe)?

$vysledek = array();
$identifikator = "0";
while($radek = $vysledek->fetch_assoc())
{
$identifikator++; 
$vysledek[$identifikator] = $radek;
}
Dunalnel
Profil
q:
Takže za

1) $vysledek, přece nemůžeš předefinovat na nové pole, když už v ní máš nějaká data (To odvozuji, z toho že tam máš na řádku 3 $vysledek->fetch_assoc()
2) Čeho chceš docílit? Jen aby si měl ve výsledku pole, které bude mít obsah té tabulky a index na začátku 1 a ne 0?

To potřebuji jen pro ujasnění. :-)
q
Profil *
1, Pokud nepoužiji $vysledek = array(); a dělám 2x select z databáze, tak mi to u druhého selectu přidá k poli na začátek data druhého selectu, ale poté následují data z prvního selectu.

2, Pole chci aby začínalo číslem 1.

Zajímalo mě jestli lze tento kód napsal lépe, hlavně kvůli tomu abych příště nedělal zbytečně chyby.
q
Profil *
oprava 1, Znovu jsem se podíval na var_dump($vysledek); a data se nepřidávají nakonec, ale přepisují ty stará z prvního selectu, která se nesmazala
Alphard
Profil
1. Do proměnné na začátku ukládáte "0" (to je řetězec), ale pak pracujete s číslem. To je hloupost, která prochází jen díky benevolenci PHP.
2. Můžete použít přímo $vysledek[++$identifikator], nemusíte to zvětšovat na samostatném řádku.
3. PHP umí samo zvyšovat indexy pole. Tady je komplikace, že to má být od 1 (to mi samo o sobě nepřipadá rozumné). Někdy se to řeší dodáním první hodnoty a jejím následným smazáním, nebo explicitním zadáním jen 1, ale to už nebude jednodušší než současná podoba. Smysl to má v situacích, kdy by byl problém udržovat proměnnou s počítadlem (např. předávání pole mezi funkcemi).
q
Profil *
Děkuji. Pořád ale nechápu proč musím použít (a jestli je to správně) $vysledek = array(); aby se smazali data z proměnné $vysledek, které se přiřadili při prvním výpisu a nezůstali tam při druhém výpisu.
Alphard
Profil
Přiřazením prázdného pole smažete to předchozí.
Na začátku byste měl mít správně také $vysledek = array();
Bertram
Profil
q:
Mohu se zde ještě zeptat jestli je takovýto kód dobře napsaný nebo to lze napsat ještě lépe (jen v rámci toho aby jsem věděl v čem dělám chyby a co lze napsat lépe)?
Ahoj, už v prvním příspěvku uvádíš „které bude sloužit jako identifikátor‟.

Nebylo by tedy lepší vrátit se k prvnímu způsobu a vybrat si z příslušného řádku záznamu vhodný sloupec popř. kombinaci podle které bude identifikátor opravdu identifikátorem.
Protože jinak jde o pořadí v jakém byly záznamy vráceny, nikoli o identifikaci příslušného záznamu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0