Autor Zpráva
karbon
Profil *
Dobrý den, potřeboval bych nějak seřadit prvky v poli podle čísla, které má každý prvek na začátku. Toto číslo zjistím f-cí explode, ale nevím jak přesně seřadit tyto data, tak aby jako první byla část pole s nejmenším číslem. Pro ukázku sem dávám i script, který ale nefunguje:
$je_lepsi = array();
for($i=0; $i < $kolik; $i++){
$zacatek2 = explode('.', $vypis[$i]);
$zacatek2 = $zacatek2[0];
echo "$zacatek2<br>\n";
if($zacatek2 < $je_lepsi){
array_push($je_lepsi, $zacatek2);
}
else{
array_unshift($je_lepsi, $zacatek2);
}
}
for($j=0; $j <$kolik; $j++){
echo $je_lepsi[$j].", ";
}

jako data dostane textové řetězce stylu "číslo*text, který je potřeba seřadit", díky za každou pomoc
pmasarik
Profil
Mna len napadá dat tie čísla po získaní s toho pola ako $key (klúč) k tej textovej hodnote a následne to zoradiť podla tých klúčov (ak sa pole nezoradí podla klúčov aj samo).

Nechce sa mi to písať ale ak vieš PHP tak takto to skús urobiť...
rabbit
Profil
Zbytečně objevujete ameriku ... vymýšlíte sortovací algoritmy, když už jsou přímo v php. pmasarik to píše dobře. V php je spousta třídících funkcí pro pole. Viz. sekce manuálu "Array Functions". Namátkou jsou to funkce jako asort(), arsort(), ksort() ... atd..
karbon
Profil *
A když už o tom mluvíte, mohl byste mi ukázat nějaký příklad? Budu za něj velmi rád
rabbit
Profil
např.:

$pole = array() ;
foreach ($vypis as $radekVypisu) {
$rozlozeno = explode('*', $radekVypisu, 2) ;
$pole[(int) $rozlozeno[0]] = $rozlozeno[1] ;
}
ksort($pole) ;


Dodatečně mě napadá upozornění, že v výše uvedeném případě se ti ta čísla v tom výpisu nesmí opakovat!
karbon
Profil *
Díky moc za rady a čas, jen ještě malá otázečka: když chci vypsat už setříděné pole pomocí smyčky, v hranaté závorce musím použít takovou hodnotu, jakou měl klíč (třeba $pole[cislo_klice]). Tyto čísla můžou být v rozsahu nula až třeba do desítek tisíc, tak jsem našel f-ci array_combine, abych to nějak "zkosil". Je to vhodná funkce?
rabbit
Profil
To je zbytečné. Desítky tisíc php nevadí. Pokud ty klíče nepotřebuješ (čísla v nich obsažená), vypisuj pole následně opět přes
foreach ($pole as $prvekPole) {

echo $prvekPole ;
}

Pokud potřebuješ pro výpis nějaké počítadlo, přidej si tam

$i = 1;
foreach ($pole as $prvekPole) {
echo $i++ . ' = ' . $prvekPole ;
}


PS:array_combine() je f-ce naprosto nevhodná ;)
To už radši zkus použít array_values().
karbon
Profil *
díky moc za rady
Toto téma je uzamčeno. Odpověď nelze zaslat.