Pravilno razvrščanje arraya
 
gentleman 10. okt 2012 13:08:18 Pridružen od:
21. sep 2009
331 objav
381 63 5
#1

Pozdrav!



Spet jaz, tokrat z zelo banalnim problemom :)

Imam array podatkov:


Array
(
[0] => 10. b
[1] => 10.a
[2] => 8. a
[3] => 8. b
[4] => 9. a
[5] => 9. b
)

Kako bi lahko najboljše razvrstil ta array, da bi pokazalo: 10. a, 10.b, 9.a, 9.b...

Najbližje čemur sem se približal je tole:



Poizkusil sem z vsem živim: od sort(), do natsort(), asort(), ksort()..... in ne dobim želenega zaporedja. :(


všeč(0) ni všeč(0) spam(0)
 
Vini 10. okt 2012 13:19:42 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#2

Verjetno najlažje z uporabo usort in znotraj UDF primerjaš stringe s strnatcmp.


všeč(0) ni všeč(0) spam(0)
 
Vini 10. okt 2012 13:24:51 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#3

Aja, ti bi rad razvrščal po številki padajoče, znotraj številke pa posamezne črke naraščajoče?


všeč(0) ni všeč(0) spam(0)
 
gentleman 10. okt 2012 13:27:33 Pridružen od:
21. sep 2009
331 objav
381 63 5
#4

Točno tako Vini! ;)


všeč(0) ni všeč(0) spam(0)
 
SlimDeluxe 10. okt 2012 14:20:32 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#5

Quick and dirty solution: morda bi jih na začetku spravil v assoc. array.



9 => array( a)

10 => array ( b, a )

8 => array ( a, b )



Potem pa naprej sortiraj notranje

array_map('sort', $array)



Še po ključu

ksort($array)



In obrni

$koncni = array_reverse($array, TRUE);


všeč(0) ni všeč(0) spam(0)
Freelance Web Developer
 
gentleman 10. okt 2012 15:07:46 Pridružen od:
21. sep 2009
331 objav
381 63 5
#6

SlimDeluxe, to bi bla ena rešitev da... Ampak probem je, da imena ne bodo vedno taka,.. enkrat recimo sploh ne bo številke, ali pa bo nekaj čist X,Y...


všeč(0) ni všeč(0) spam(0)
 
pavarti 10. okt 2012 16:52:45 Pridružen od:
26. okt 2011
445 objav
587 92 14
#7

Uporabi uksort in spiši custom compare funkcijo.


všeč(1) ni všeč(0) spam(0)
 
krifa 10. okt 2012 18:16:20 Pridružen od:
9. feb 2010
402 objav
401 54 6
#8

Evo to bo to. Imaš še kakšen iziv?:)


<?php
$arr = array("10.a","10a","6.b","6b","7.a","7a","10.b","9.a","6.a","10.c","6.c","10.a","7.b","7.a","7.a","aaaa","aaa","aa","ab","dd","cc","c","bb");

print_r($arr);

usort($arr, "cmp");

print_r($arr);

function cmp($a, $b)
{
$int_a = intval($a);
$int_b = intval($b);

if($int_a < $int_b)
{
return 1;
}
if($int_a == $int_b)
if(strcmp(str_replace($int_a.".", "", $a), str_replace($int_b.".", "", $b)) > 0)
return 1;

return -1;
}
?>
všeč(3) ni všeč(0) spam(0)
Prevajanje - prevajalska agencija pravo-prevajanje.si
Awesome jobs for awesome people: Dlabs jobs
 
SlimDeluxe 10. okt 2012 18:27:15 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#9

zaay123:

SlimDeluxe, to bi bla ena rešitev da... Ampak probem je, da imena ne bodo vedno taka,.. enkrat recimo sploh ne bo številke, ali pa bo nekaj čist X,Y...




O čem točno se gre? Zakaj ne daš tem entitetam en sort atribut in omogočiš sortiranje v backendu?

V glavnem če nimaš končno-omejeno št. možnih zapisov vrednosti potem ne boš daleč prišel...


všeč(0) ni všeč(0) spam(0)
Freelance Web Developer
 
gentleman 10. okt 2012 18:30:18 Pridružen od:
21. sep 2009
331 objav
381 63 5
#10

Gre se zato, da so to imena folderjev na FTP-ju, ki jih lahko admin tudi kreira.. in so lahko vse možno..



Iščem pa neko hitro rešitev ker se mudi, zdaj da grem delat nek order sistem mi bo vzelo preveč časa za implementirat. Ali pa tudi ne ? :)


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se