Autor | Zpráva | ||
---|---|---|---|
Dotaz15825 Profil * |
#1 · Zasláno: 18. 10. 2013, 18:25:49
Zdravíčko,
měl bych na Vás menší dotaz. Udělal jsem si script, který otevře všechny soubory ve složce, pomocí explode rozkouskuje obsah souboru a vypíše hodnotu, kterou chci já. Ale těch souborů je přes 1000 a když vypisuji ty hodnoty, tak bych je potřeboval seřadit od nejvyššího po nejmenší. S kamarádem jsme zkoušeli už dost možností, ale ani jedna nefungovala. Poradil by mi někdo prosím? Děkuji. |
||
Joker Profil |
#2 · Zasláno: 18. 10. 2013, 18:31:22
To je celkem triviální, uložit si je do pole a pak setřídit to pole.
Na třídění od nejvyššího po nejmenší je rsort |
||
Dotaz15825 Profil * |
#3 · Zasláno: 18. 10. 2013, 18:39:47
[#2] Joker
No právě to mi nejde. |
||
Alphard Profil |
#4 · Zasláno: 18. 10. 2013, 18:59:38
No, kříšťálovou kouli plánujeme až na Vánoce... máte nevhodnou strukturu pole, nebo sort funkce používáte blbě. Funkce samotné určitě fungují :-)
|
||
Dotaz15825 Profil * |
#5 · Zasláno: 18. 10. 2013, 19:11:32
nevhodnou strukturu pole
Tomu nerozumím. :D |
||
Lkopo Profil * |
#6 · Zasláno: 19. 10. 2013, 19:26:05
Napíšte prosím sem Váš zdrojový kód, aby sme mohli chybu analyzovať.
|
||
Dotaz15825 Profil * |
#7 · Zasláno: 19. 10. 2013, 23:36:12
Jak jsem říkal, vypisuje mi to 2 hodnoty.
$arr = array($hodnota=>$hodnotaa); rsort($arr); echo $arr; echo "</br>"; |
||
han5vk Profil |
Toto nie sú 2 hodnoty ale index a hodnota. Dve hodnoty by boli
array($hodnota,$hodnotaa) prípadne array('index1'=>$hodnota, 'index2'=>$hodnotaa) . Nefunguje ti to pretože jeden prvok sa zoradiť inak nedá.
|
||
Lkopo Profil * |
#9 · Zasláno: 19. 10. 2013, 23:46:06
Môžeš max. nájsť ako viacrozmerne polia triediť podľa určitej hodnoty. Napr. tu - http://stackoverflow.com/questions/2699086/sort-multidimensional-array-by-value-2
|
||
Dotaz15825 Profil * |
#10 · Zasláno: 19. 10. 2013, 23:58:46
Aha, takže to teda nejde? Ta první proměnná je název souboru a ta druhá je ten obsah co z toho souboru vytahuju.. A právě ten potřebuju seřadit..
|
||
Alphard Profil |
#11 · Zasláno: 20. 10. 2013, 00:07:05
U vícerozměrného pole se můžete odkázat přímo na klíč, pod kterým je pole, které se má řadit.
rsort($arr['nazevSouboru']); |
||
Medvídek Profil |
Dotaz15825:
Nešlo by to nějak takto? Tedy projít všechny ty soubory a postupně ty hodnoty co Vás zajímají přidávat do pole? $result = array(); foreach (glob("*.txt") as $filename) { $temp = file_get_contents($filename); $temp = explode($separator,$temp); $result[] = $temp[5]; } rsort($result); |
||
Dotaz15825 Profil * |
#13 · Zasláno: 20. 10. 2013, 00:11:02 · Upravil/a: Dotaz15825
A u té array má být $neco, $neco, nebo $neco=>$neco?
Medvídek: Zkusím, zatím díky. Medvídek: Bohužel, nejde. Napíše mi to ArrayArrayArray. |
||
Medvídek Profil |
Dotaz15825:
Vytvořil jsem si přes 200 testovacích souborů, kde je obsahem string, kde jsou náhodná čísla oddělené separatorem: for($a=0;$a<222;$a++){ $string = rand(0,99999)."|".rand(0,99999)."|".rand(0,99999)."|".rand(0,99999)."|".rand(0,99999); file_put_contents("soubor_".$a.".txt",$string); } Poté nad tím spustil tento skript: $separator = "|"; $result = array(); foreach (glob("*.txt") as $filename) { $temp = file_get_contents($filename); $temp = explode($separator,$temp); $result[] = $temp[2]; } rsort($result); echo '<pre>'; print_r($result); A správně to vrátí výsledek jednoho pole, kde jsou seřazeny všechny hodnoty: Array ( [0] => 99957 [1] => 99752 [2] => 99392 [3] => 98532 [4] => 98019 [5] => 97857 [6] => 97604 [7] => 97586 [8] => 97329 [9] => 96520 [10] => 95968 [11] => 95681 [12] => 93295 [13] => 92675 [14] => 92480 [15] => 91314 [16] => 91162 [17] => 90869 [18] => 90802 atd ... V případě potřeby více hodnot takto: $separator = "|"; $result = array(); foreach (glob("*.txt") as $filename) { $temp = file_get_contents($filename); $temp = explode($separator,$temp); $result[] = array("foo" => $temp[2], "bar" => $temp[4]); } function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) { $sort_col = array(); foreach ($arr as $key=> $row) { $sort_col[$key] = $row[$col]; } array_multisort($sort_col, $dir, $arr); } array_sort_by_column($result, 'bar'); echo '<pre>'; print_r($result); Výsoledek seřazený podle hodnot s klíčem bar jako ASC, změnou SORT_ASC za SORT_DESC změníte pořadí. Array ( [0] => Array ( [foo] => 82751 [bar] => 225 ) [1] => Array ( [foo] => 45819 [bar] => 451 ) [2] => Array ( [foo] => 30007 [bar] => 1217 ) [3] => Array ( [foo] => 60772 [bar] => 1831 ) [4] => Array ( [foo] => 13235 [bar] => 2609 ) [5] => Array ( [foo] => 76110 [bar] => 2960 ) [6] => Array ( [foo] => 219 [bar] => 3143 ) |
||
Dotaz15825 Profil * |
#15 · Zasláno: 20. 10. 2013, 00:36:13
Hm, tak já fakt nevím..
Mám prostě soubor Něcoxx.txt a v něm: 14 51,52,0,3 1,2 |
||
Medvídek Profil |
#16 · Zasláno: 20. 10. 2013, 00:39:37
Dotaz15825:
Ještě si asi nerozumíme. Máte jeden soubor, v něm hledáte všechny čísla oddělený čárkou a ty pak chcete seřadit, nebo máte více souborů se strukturou co jste poslal a hledáte vždy první číslo na řádku 3? Pořád nechápu, jakou máte strukturu souborů a obsah a podle čeho se vlastně řídíte. |
||
Dotaz15825 Profil * |
#17 · Zasláno: 20. 10. 2013, 00:43:44
Souborů je přes 1200 - každý se jmenuje jinak a každý má jiný obsah souboru a u každého vytahuji první hodnotu na třetím řádku ze zhora.
|
||
Medvídek Profil |
Dotaz15825:
Tak už jsme doma, v tom případě bych to udělal takto: $result = array(); foreach (glob("*.txt") as $filename) { $temp = file_get_contents($filename); $temp = explode(PHP_EOL,$temp);//rozdelime si soubor na radky $temp = $temp[2]; //3 radek $temp = explode(",",$temp);//rozdelime si 3 radek na cisla podle carky (jeste bych dal treba kontrolu jestli se carka vyskytuje) $result[] = array("number" => $temp[0], "file" => $filename); } function array_sort_by_column(&$arr, $col, $dir = SORT_DESC) { $sort_col = array(); foreach ($arr as $key=> $row) { $sort_col[$key] = $row[$col]; } array_multisort($sort_col, $dir, $arr); } array_sort_by_column($result, 'number'); echo '<pre>'; print_r($result); Výsledek u mě: Array ( [0] => Array ( [number] => 99844 [file] => soubor_9.txt ) [1] => Array ( [number] => 99694 [file] => soubor_42.txt ) [2] => Array ( [number] => 99560 [file] => soubor_78.txt ) [3] => Array ( [number] => 99295 [file] => soubor_53.txt ) [4] => Array ( [number] => 96640 [file] => soubor_151.txt ) [5] => Array ( [number] => 96066 [file] => soubor_155.txt ) Obsah náhodnéhou souboru: soubor_9.txt 51342 46536,46063,49191,51086 99844,12896 |
||
Dotaz15825 Profil * |
#19 · Zasláno: 20. 10. 2013, 00:54:20
Super, toto už funguje. Akorát, když tam hodím jen echo, aby mi to pod sebe vypsalo seřazená čísla, nefungjue.
Ale děkuji moc za pomoc :) |
||
Medvídek Profil |
Dotaz15825:
Výsledek máte v poli, s tím už si dělejte co potřebujete, pokud jde jen o vypsání čísel a názvů souborů, tak třeba: foreach($result AS $val){ echo $val["number"]." - ".$val["file"]."<br />"; } Výsledek: 99844 - soubor_9.txt 99694 - soubor_42.txt 99560 - soubor_78.txt 99295 - soubor_53.txt 96640 - soubor_151.txt 96066 - soubor_155.txt 95874 - soubor_118.txt 95504 - soubor_35.txt 95449 - soubor_105.txt 95397 - soubor_170.txt 95086 - soubor_164.txt |
||
Časová prodleva: 11 let
|
0