Autor Zpráva
noName
Profil *
Zdravím, chtěl bych se zeptat, jak vyřešit to, že mám xml. Z xml si udělám pole, které si následně zamíchám (shuffle()). Potřebuji vypsat 10 položek, v xml jich je více a proto mám udělané toto:

$counter = 1;
foreach($arra as $key => $item){
$counter++;
if ($counter < 10) {
//...
}
}

Jsou to otázky, které po odeslání formuláře potřebuji opravit, což není problém. Problém je však to, že já potřebuji vypsat 10stejných položek z pole, které by byly ideálně na stejné pozici. Díky za pomoc.
Virtus
Profil
noName:
10stejných položek z pole, které by byly ideálně na stejné pozici.
Nevím co si pod tím přestavit, jako že by měli stejný klíč ($key)?
A další věc, kód co si poslal, ti do toho ifu:

if ($counter < 10) {
//...
}
vleze pouze 8x, protože v prvním momentě už je proměnná $counter rovna 2.

Chtělo by to aby si poslal příklad pole a co z něj chceš vypsat.
noName
Profil *
Counter mám nastavený na 0, překlik jsem se, ale kolik se vypíše položek je teď jedno, potřebuji vyřešit spíše jak vypsat stejné položky. Pole vypadá zjednodušeně takto :

$tazky = array(
array('otazka' => 'Otázka1', 'odpovedi' => array(...)),
array('otazka' => 'Otázka2', 'odpovedi' => array(...)),
array('otazka' => 'Otázka3', 'odpovedi' => array(...)),
);

z toho si vykreslím formulář. Položek je tam více, ale pro ukázku to stačí.
Virtus
Profil
Takže tohle pole $tazky co jsi napsal obsahuje pouze stejné položky, tedy chceš vypsat všechny položky z polí, které obsahují klíče: otazka, odpovedi?
noName
Profil *
Jelikož si pole pomocí funkce shuffle zamíchám, vypíše se mi 10 náhodných otázek (nemá to být tazky, ale otazky). Ty si vypisuji do formuláře. Po odeslání formuláře potřebuji, aby se mi vypsalo těch 10 otázek na které jsem odpovídal, ideálně ve stejném pořadí.

* Otázka 8
* otázka 10
* Otázka 9
...
Po odeslání se mi to vypíše třeba takto:
* Otázka 1
* Otázka 2
* Otázka 3
Virtus
Profil
Pokud potřebuješ aby se ti vypsali jenom otázky (a jejich odpovědi), tak si tu otázku přidej třeba do hidden inputu a vypiš si jí taky do formuláře, při odeslání pak budeš mít tedy jak text otázky samotné tak i hodnotu jakou se na ní odpovědělo, je zbytečné znova načítat a parsovat xml soubor.

Pokud ovšem potřebuješ zobrazit otázku a její zprávný odpovědi (které jsou v xml souboru) + hodnotu jakou se na ní odpovědělo, dalo by se použít něco takového, ovšem vzhledem k použití funkce shuffle(), si stejně budeš muset samotnou otázku poslat z formuláře taky, jako v prvním případě, protože ukázkový pole co jsi poslal neobsahuje žádný index/klíč, podle kterého by se dalo snadno dohledat o jakou otázku se jedná:

$auxArray = array();
$i = 0;
foreach($otazky as $oneOtazka ){ //postupně procházíme pole všech otázek
  foreach( $_POST['otazky'] as $otazka ){ // $_POST['otazky'] - jedná se o pole otázek odeslaných z formuláře
    if( $oneOtazka['otazka'] == $otazka['otazka'] ){ //$otazka['otazka'] - obsahuje text otázky
       //uložíme otázku do nějakého pomocného pole, se kterým si pak můžu dělat co uzním za vhodné, třeba jej podle něčeho seřadit
       $auxArray[$i]['xml'] = $oneOtazka;
       $auxArray[$i]['odpoved'] = $otazka['odpoved'];
       $i++;
    }
  }
}
//v tomto momentě, mám již teda vyselectované všechny otázky co potřebuju
/*
$auxArray[<číslo>][xml] : zde najdu pole s otázkou = array('otazka' => 'Otázka1', 'odpovedi' => array(...))
$auxArray[<číslo>][odpoved] : zde najdu na tuto otázku odpoveď
*/
html vypadá asi nějak takhle:
<form method="post">
<input type="text" value="" name="otazky[0]['odpoved']" />
<input type="hidden" value="<text otázky>" name="otazky[0]['otazka']" />
</form>

Ber to jako jen příklad, psal sem to tu bez nějakýho editoru a nezkoušel jsem to, takže spíš takový inspirace jak by to asi mohlo fungovat.

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: