Autor Zpráva
tatyalien
Profil
Dobrý den,
můžete mě nakopnout nějak... snazím se docílit něčeho podobného co je ve fagu "Výpis dnů v týdnu do tabulky seřazený dle abecedy do sloupců."
Sloupec a | Sloupec B
---------------------------
1. Pondělí | 5. Pátek
2. Úterý    | 6. Sobota
3. Středa  | 7. Neděle
4. Čtvrtek |


Z fagu mě to funguje, ale tam jsou id 1-7 přesně za sebou, mě ale jde o to, že u mě v tabulce může být id třeba 5,9, 90, 7, 6..., jde o to, že si data tahám z databáze (hodnoty id, sloupec) kde jsou data seřazené dle sloupce. A nějaké id můžou být "smazané".

$VstupniData = array(1 => "a", 91 => "b", 6 => "c", 90 => "d", 5 => "e");
$sloupcu = 2;
$pocetRadku = ceil(count($VstupniData) / $sloupcu);

Kde by měla být tabulka cca:

Kde by měl být výsledek
Sloupec A | Sloupec B
----------------------------
1 - a         | 90 - d
91 - b       | 5 - e
6 - c         |


Napadlo mě, že si data načtu do dvourozměrného, nebo třírozměrného pole $Pole[0][id][hodnota_sloupce], pak si můžu testovat dle scriptu ve fagu, jestli prvek pole existuje:
echo "<table style='margin-left:-1px;' border='1'><tr><tr><th colspan='$sloupcu'>Výběr dat</th></tr><td>";
for ($i = 1; $i <= $pocetRadku; $i++)
{
    echo "<tr>";
    for ($j = 0; $j < $sloupcu; $j++)
    {
        // otestuji existenci hodnoty pole
        if (isset($VstupniData[$j * $pocetRadku + $i]))
        {
            // vypíšu hodnotu buňky
        }
    }
    echo "</tr>";
}
echo "</td></tr></table>";


ale nevím jak pak z něj vymlátit hodnotu array.. nějk mě to nemyslí :(
Alphard
Profil
Script ve FAQ nepracuje s id, ale s klíčem pole (automaticky přiděleném v cyklu). Mělo by to fungovat bez jakýchkoliv změn, řazení použité na úrovni databáze není podstatné.
tatyalien
Profil
No problém u mě je, že já data tahám do "checkboxů" kde jim dosazuji value id hodnotu z db, a popisku hodnotu z db (sloupce)...
Jostram
Profil *
* Syntax elementu <table> máte špatně - <tr> je nadřazený <td>
* Máte tam <tr><tr> - taky chybka...
* nějk mě to nemyslí - dejte si na chvíli oraz, to je to nejlepší, co můžete udělat. ;-)
* Ano, nějaké ID může být smazané, ale na tom nesejde - "nasosněte" si ty data do pole od prvého - nějak takhle:
while( $row == mysql_fetch_object($result) )
{ // "přinést" všechny řádky z MySQL dotazu a vložit je do pole
	$vstupniData[] = array( 'id' => $row->id, 'sloupec' => $row->sloupec );
}
a vyleze vám z toho pole, které bude vypadat nějak takto:
array(3) {
  [0]=> array(2) {
    ["id"]=>int(1)
    ["sloupec"]=>string(3) "asd"
  }
  [1]=> array(2) {
    ["id"]=>int(20)
    ["sloupec"]=>string(3) "dfg"
  }
  [2]=> array(2) {
    ["id"]=>int(21)
    ["sloupec"]=>string(3) "fgh"
  }
}

Tohle by mělo vyřešit váš problém s poli.

Dál už to pak vypíšete jako ve FAQu - spočítáte počet prvků, spočítáte tabulku (řádky/sloupce), vypíšete.
tatyalien
Profil
Jostram:
K tomuhle jsem se dostal taky... ale pak jsem nevěděl a stále nevím, jak vypíšu z vašeho příkladu:
$vstupniData[0]... získat id 1, sloupec asd
$vstupniData[1]... získat id 20, sloupec dfg

Nahoře mám tu tabulku blbě jak píšete, jsem to zkopíroval už ze souboru, kde se patlám s hokusama pokusama :-D
Jostram
Profil *
tatyalien:
To, co jsem vám poslal je tzv. "asociativní pole". V prvním poli (index 0ú dostanete ty údaje takto:
echo $vstupniData[0]["id"] . ' - ' .$vstupniData[0]["sloupec"];
tatyalien
Profil
Oki díky, jen u:
while( $row == mysql_fetch_object($result) )


máš o jedno rovná se navíc...

while( $row = mysql_fetch_object($result) )


Teď už se s tím poperu, díky ;)... ale budu pokračovat až druhý den ;) - únava ;)
Jostram
Profil *
tatyalien:
máš o jedno rovná se navíc...
Pravda pravda. Omlouvám se, uteklo mi

ale budu pokračovat až druhý den
Však to je nejlepší :)
tatyalien
Profil
Kdyžtak výsledek:
$query = "SELECT id, hodnota FROM abc ORDER BY hodnota";
// odešlu dotaz do MYSQL
$result = mysql_query($query);
while( $row = mysql_fetch_object($result) )
{ // "přinést" všechny řádky z MySQL dotazu a vložit je do pole
    $vstupniData[] = array( 'id' => $row->id, 'hodnota' => $row->hodnota );
}
$sloupcu = 2;
$pocetRadku = ceil(count($vstupniData) / $sloupcu);
echo "<table style='margin-left:-1px;' border='1'><tr><th colspan='$sloupcu'>vypsání</th></tr>";
for ($i = 0; $i <= ($pocetRadku-1); $i++)
{
    echo "<tr>";
    for ($j = 0; $j < $sloupcu; $j++)
    {
        if (isset($vstupniData[$j * $pocetRadku + $i]))
        {
            echo "<td>" . $vstupniData[$j * $pocetRadku + $i]["id"] . ' - ' .$vstupniData[$j * $pocetRadku + $i]["hodnota"]. "</td>";
        } else {
            echo "<td> </td>";
        }
    }
    echo "</tr>";
}
echo "</table>";

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0