Autor Zpráva
Jiří Ráb
Profil
Ahoj chtěl jsem se zeptat jak z tohoto pole dostat data setřídit, pomocí jakého cyklu? Viz kod
<?php
$znamky["4.B"]["Tobiáš"]["Ondřej"]["PG"]["2016-09-23"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["PG"]["2016-09-26"] = 3;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["TV"]["2016-09-27"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-09-28"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["TV"]["2016-10-07"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-10-22"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-10-29"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-11-05"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-11-14"] = 3;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-11-19"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-11-19"] = 2;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["PG"]["2016-11-25"] = 3;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-12-03"] = 2;

var_dump($znamky);


?>



Potřeboval bych ty známky uložit do jednorozměrných polí.
$PG=array();
$TV=array();
$CJ=array();
$MA=array();



Ale nevím jak to udělat kvůli těm, datumu.
Tomášeek
Profil
Jiří Ráb:
pomocí jakého cyklu?
Třeba foreach.
Jiří Ráb
Profil
zkoušel jsem to ale nejde mi to viz posílam jak
foreach ($znamky as $trida) {
    foreach ($trida as $jmeno) {
        foreach ($jmeno as $jmeno2) {
            foreach ($jmeno2 as $predmet) {
                foreach ($predmet as $datum) {
                    foreach ($datum as $key => $value) {
                        switch ($predmet) {
                        case 'PG':
                            $PG[]=$value;
                            break;


                            case 'MA':
                            $MA[]=$value;
                            break;



                            case 'TV':
                            $TV[]=$value;
                            break;

                            case 'CJ':
                            $CJ[]=$value;
                            break;
                        
                        default:
                            echo 'chyba';
                            break;
                    }
                    }
                }
            }
        }
    }
}



nevím proč to nejde
Keeehi
Profil
První tři klíče jsou stále stejné, to předpokládám není pravda vždy, že? Zeptám se tedy takto: Snažíš se tedy o získání známek pro každý předmět nezávisle na třídě, jménu a datu?

Proč máš klíče v poli rozdělené na jméno a příjmení?
Důležitější je, proč to pole vůbec takto vypadá? Asi to taháš z databáze a takovýto formát tvoříš, ale jiný by byl lepší. Jestli chceš, rád ti poradím. Stačí na to totiž dvourozměrné pole.
Jiří Ráb
Profil
Tohle pole jsem dostal od učitele za ukol rozřídit do jednorozměrných polí,snažím se o to aby byli pole
$PG=array();
$TV=array();
$CJ=array();
$MA=array();
a to těch jsem uložil znamky z tohoto vicerozměrného pole podle předmetu


Nechapu proc nam dal takto rozměrne pole souhlasím s tím,že by stacilo dvourozměrné.Asi chce abychom uměli pracovat s takto hodně rozměrným polem ale já jsem to zkoušel třídit pomocí těch foreach cyklu a nejde mi to vubec


ty známky maji byt závisle pouze na předmětu protože třída jmeno a příjmení jsou furt stejne


mě pro třídění tam vadí to datum strasne
Tomášeek
Profil
Jiří Ráb:
$predmet je pole, nelze jej tedy takhle použít ve switchi, ten očekává string.

Soudě podle předchozích dotazů, myslím, že bys měl ve škole dávat více pozor. Tohle jsou banální věci (nejen toto, ale i ta předchozí témata), která na diskusi vůbec nepatří.
Keeehi
Profil
Jiří Ráb:
ty známky maji byt závisle pouze na předmětu protože třída jmeno a příjmení jsou furt stejne
Pokud jsou ty klíče konstantní, tak se to dá velmi zjednodušit.

foreach ($znamky["4.B"]["Tobiáš"]["Ondřej"] as $predmet => $dny) {
    switch ($predmet) {
        case 'PG':
            $PG = array_values($dny);
            break;

        case 'MA':
            $MA = array_values($dny);
            break;
 
        case 'TV':
            $TV = array_values($dny);
            break;

        case 'CJ':
            $CJ = array_values($dny);
            break;

        default:
            echo 'chyba';
    }
}
Jiří Ráb
Profil
děkuju ti moc nedelam to schvalně že bych sem psal ale s tímhle jsem si fakt nevedel rady a ve škole jsme brali jenom dvojrozměrné pole
Keeehi
Profil
Jiří Ráb:
Vícerozměrná pole jsou úplně stejná jak dvourozměrná (z technického hlediska). Jediné, co je na nich těžší je mentální hledisko - s každou úrovní je trochu náročnější si udržet přehled o tom, v které úrovni se člověk vlastně pohybuje.
Jelikož je ale ["4.B"]["Tobiáš"]["Ondřej"] konstantní, redukuje se problém vlastně na dvourozměrné pole.
Jiří Ráb
Profil
Zkusil jsem to spustit a nějak to nejde píše to chyby viz kod a foto
<?php
$znamky["4.B"]["Tobiáš"]["Ondřej"]["PG"]["2016-09-23"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["PG"]["2016-09-26"] = 3;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["TV"]["2016-09-27"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-09-28"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["TV"]["2016-10-07"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-10-22"] = 1;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-10-29"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-11-05"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-11-14"] = 3;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["MA"]["2016-11-19"] = 4;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-11-19"] = 2;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["PG"]["2016-11-25"] = 3;
$znamky["4.B"]["Tobiáš"]["Ondřej"]["CJ"]["2016-12-03"] = 2;

$PG=array();
$TV=array();
$CJ=array();
$MA=array();



foreach ($znamky["4.B"]["Tobiáš"]["Ondřej"] as $predmet => $dny) {
    
    switch ($predmet) {
       case 'PG':
            $PG[] = values($dny);
            break;
 
        case 'MA':
            $MA[] = values($dny);
            break;
 
        case 'TV':
            $TV[] = values($dny);
            break;
 
        case 'CJ':
            $CJ[] = values($dny);
            break;
 
        default:
            echo 'chyba';
    }
}





var_dump($TV);




?>
Závažná chyba: Uncaught Error: Volání k nedefinovaným hodnotám funkcí () v C: \ wamp64 \ www \ php_projekt \ vicerpol.php on line 27
(!) Chyba: volání nedefinovaných hodnot funkcí () v C: \ wamp64 \ www \ php_projekt \ vicerpol.php na řádku 27
Stack volání
#    Čas    Paměť    Funkce    Umístění
1    0,0009    374536    {hlavní}( )    ... \ vicerpol.php : 0



nevím proč to hlasí nedefinovanou hodnotu funkce
Keeehi
Profil
Sorry, ta funkce je array_values, Nějak mi to tam vypadlo a pak jsem to rozkopíroval. V původním příspěvku opraveno.

+ ty jsi si tam přidal [] za ty proměnné, ty tam nemají co dělat
Jiří Ráb
Profil
dík


už jsem je dal pryc vzniklo by mě tím zase dvojpole
Keeehi
Profil
Jiří Ráb:
už jsem je dal pryc vzniklo by mě tím zase dvojpole
Přesně tak. Ono by šlo proměnnou $dny zase projít foreachem a hodnoty vkládat postupně do toho pole a v tom případě by tam byly správně. Ale funkce array_values vrací pole hodnot (vlastně přepíše všechny klíče na číselné) a tam by se to nehodilo.
Jiří Ráb
Profil
díky za pomoc
Jiří Ráb
Profil
Jenom se tě potřebuji ješte jednou zeptat ty $dny je teda pole nebo ty předměty?


začínám v tom mít zmatek jelikož ty mas ukladas array_values($dny),tak jestli jsou teda ty $dny pole já jsem si myslel teda původne že pole jsou ty předměty a ty maji indexy ty datumy a svoje hodnoty
Keeehi
Profil
Chápu, že to je trochu zmatečné.
1) Moje proměnná $predmet a tvoje proměnná $predmet obsahují něco jiného. V tvém případě to je pole se známkami kde klíče jsou datumy, v mém případě je to klíč takového pole a to samotné pole je v proměnné $dny.
2) Moje pojmenování proměnné $dny není úplně nejšťastnější. Lepší by bylo to pojmenovat $znamkyPredmetu.
Jiří Ráb
Profil
Díky ti za odpověd

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