|
| sortere data i array Fra : scootergrisen |
Dato : 12-09-10 13:07 |
|
Jeg vil gerne sortere dette :
'test' => array(
array('x', 'x', 'g')
,array('x', 'x', 'h')
,array('x', 'x', 'v')
,array('x', 'x', 'w')
,array('x', 'x', 't')
,array('x', 'x', 'a')
,array('x', 'x', 'h')
,array('x', 'x', 'e')
,array('x', 'x', 'a')
,array('x', 'x', 'x')
)
så det bliver til dette :
'test' => array(
array('x', 'x', 'a')
,array('x', 'x', 'a')
,array('x', 'x', 'e')
,array('x', 'x', 'g')
,array('x', 'x', 'h')
,array('x', 'x', 'h')
,array('x', 'x', 't')
,array('x', 'x', 'v')
,array('x', 'x', 'w')
,array('x', 'x', 'x')
)
Hvordan gør man det ?
| |
Martin (12-09-2010)
| Kommentar Fra : Martin |
Dato : 12-09-10 23:16 |
|
On 12-09-2010 21:06, scootergrisen wrote:
> Jeg vil gerne sortere dette :
>
> 'test' => array(
> array('x', 'x', 'g')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 'v')
> ,array('x', 'x', 'w')
> ,array('x', 'x', 't')
> ,array('x', 'x', 'a')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 'e')
> ,array('x', 'x', 'a')
> ,array('x', 'x', 'x')
> )
>
> så det bliver til dette :
>
> 'test' => array(
> array('x', 'x', 'a')
> ,array('x', 'x', 'a')
> ,array('x', 'x', 'e')
> ,array('x', 'x', 'g')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 't')
> ,array('x', 'x', 'v')
> ,array('x', 'x', 'w')
> ,array('x', 'x', 'x')
> )
>
> Hvordan gør man det ?
Hvis dine arrays altid ser sådan ud, så kan du bruge multisort
array_multisort($test[0], SORT_ASC, SORT_STRING,
$test[1], SORT_ASC, SORT_STRING,
$test[2], SORT_ASC, SORT_STRING
);
http://se.php.net/array_multisort
| |
scootergrisen (12-09-2010)
| Kommentar Fra : scootergrisen |
Dato : 12-09-10 20:10 |
|
Hvor angiver man hvilket felt man ønsker at sortere efter ?
Her er et andet eksempel.
Dette :
'test' => array(
array('telefon', 'bip', 'g')
,array('ko', 'muh', 'a')
,array('mis', 'miau', 'x')
,array('bil', 'dut', 'h')
)
Skal blive til dette :
'test' => array(
array('ko', 'muh', 'a')
,array('telefon', 'bip', 'g')
,array('bil', 'dut', 'h')
,array('mis', 'miau', 'x')
)
Der skal sorteres efter det sidste felt i hvert array 'a', 'g', 'h' og
'x'.
| |
Martin (13-09-2010)
| Kommentar Fra : Martin |
Dato : 13-09-10 11:39 |
|
On 13-09-2010 04:10, scootergrisen wrote:
> Hvor angiver man hvilket felt man ønsker at sortere efter ?
>
> Her er et andet eksempel.
>
> Dette :
>
> 'test' => array(
> array('telefon', 'bip', 'g')
> ,array('ko', 'muh', 'a')
> ,array('mis', 'miau', 'x')
> ,array('bil', 'dut', 'h')
> )
Dit array ser således ud
$test[0][0][0] = Telefon
$test[0][0][1] = bip
$test[0][0][2] = g
$test[0][1][0] = ko
$test[0][1][1] = muh
$test[0][1][2] = a
$test[0][2][0] = mis
$test[0][2][1] = miay
$test[0][2][2] = x
$test[0][3][0] = bil
$test[0][3][1] = dut
$test[0][3][2] = h
array_multisort($test[0][0], SORT_ASC, SORT_STRING,
$test[0][1], SORT_ASC, SORT_STRING,
$test[0][2], SORT_ASC, SORT_STRING,
$test[0][3], SORT_ASC, SORT_STRING
);
>
> Skal blive til dette :
>
> 'test' => array(
> array('ko', 'muh', 'a')
> ,array('telefon', 'bip', 'g')
> ,array('bil', 'dut', 'h')
> ,array('mis', 'miau', 'x')
> )
>
> Der skal sorteres efter det sidste felt i hvert array 'a', 'g', 'h' og
> 'x'.
| |
Ronny Olsen (13-09-2010)
| Kommentar Fra : Ronny Olsen |
Dato : 13-09-10 12:54 |
|
Den 13-09-2010 04:10, scootergrisen skrev:
> Hvor angiver man hvilket felt man ønsker at sortere efter ?
>
> Her er et andet eksempel.
>
> Dette :
>
> 'test' => array(
> array('telefon', 'bip', 'g')
> ,array('ko', 'muh', 'a')
> ,array('mis', 'miau', 'x')
> ,array('bil', 'dut', 'h')
> )
>
> Skal blive til dette :
>
> 'test' => array(
> array('ko', 'muh', 'a')
> ,array('telefon', 'bip', 'g')
> ,array('bil', 'dut', 'h')
> ,array('mis', 'miau', 'x')
> )
>
> Der skal sorteres efter det sidste felt i hvert array 'a', 'g', 'h' og
> 'x'.
Som Martin skriver skal vi have fat i array_multisort, jeg vil vælge at
opdele det i kolonner først og sorterer det efter disse
<?php
/*
$test = array(
array('telefon', 'bip', 'g'),
array('ko', 'muh', 'a'),
array('mis', 'miau', 'x'),
array('bil', 'dut', 'h')
);
*/
$test = array(
array('x', 'x', 'g'),
array('x', 'x', 'h'),
array('x', 'x', 'v'),
array('x', 'x', 'w'),
array('x', 'x', 't'),
array('x', 'x', 'a'),
array('x', 'x', 'h'),
array('x', 'x', 'e'),
array('x', 'x', 'a'),
array('x', 'x', 'x')
);
function SortMultiArray(&$data){
// http://dk.php.net/array_multisort Example #3 Sorting database results
// Obtain a list of columns
foreach ($data as $key => $row) {
$col0[$key] = $row[0];
$col1[$key] = $row[1];
$col2[$key] = $row[2];
}
// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($col2, SORT_ASC, $data);
}
print_r($test);
SortMultiArray($test);
print_r($test);
?>
--
Med Venlig Hilsen
Ronny Olsen
http://olsensweb.dk
| |
Henning (13-09-2010)
| Kommentar Fra : Henning |
Dato : 13-09-10 13:08 |
|
On 2010-09-12 21:06, scootergrisen wrote:
> Jeg vil gerne sortere dette :
>
> 'test' => array(
> array('x', 'x', 'g')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 'v')
> ,array('x', 'x', 'w')
> ,array('x', 'x', 't')
> ,array('x', 'x', 'a')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 'e')
> ,array('x', 'x', 'a')
> ,array('x', 'x', 'x')
> )
>
> så det bliver til dette :
>
> 'test' => array(
> array('x', 'x', 'a')
> ,array('x', 'x', 'a')
> ,array('x', 'x', 'e')
> ,array('x', 'x', 'g')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 'h')
> ,array('x', 'x', 't')
> ,array('x', 'x', 'v')
> ,array('x', 'x', 'w')
> ,array('x', 'x', 'x')
> )
>
> Hvordan gør man det ?
Der er kommet en masse løsninger, men hvorfor ikke bare bruge uasort ?
function cmp($a, $b) {
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}
uasort($array, 'cmp');
kode er klippet næsten direkte fra
http://dk.php.net/manual/en/function.uasort.php
Eneste ændring er at den checker på $a[2] i stedet for $a, hhv $b
/Henning
| |
scootergrisen (13-09-2010)
| Kommentar Fra : scootergrisen |
Dato : 13-09-10 07:51 |
|
Tak til allesammen. Det ser ud til at virke som jeg vil have det nu.
Og jeg læste mig frem til hvordan man lavede det case-insensitive.
Det eneste der ikke virker er æ, ø, å men det jo typisk.
Der er nogen grund til der står &$data og ikke $data i funktionens
argument ?
function SortMultiArray(&$data){
Hvad betyder det & ?
| |
Henning (13-09-2010)
| Kommentar Fra : Henning |
Dato : 13-09-10 15:17 |
|
On 2010-09-13 15:51, scootergrisen wrote:
> Der er nogen grund til der står &$data og ikke $data i funktionens
> argument ?
>
> function SortMultiArray(&$data){
>
> Hvad betyder det & ?
& gør at der overføres en pointer til de originale data, ikke en kpi af
dine data.
<?php
function a($local) {
$local++;
echo "local er nu $local";
}
function b(&$local) {
$local++;
echo "local er nu $local";
}
$test = 1;
echo "test er nu $test<br>";
a($test);
echo "test er nu $test<br>";
b($test);
echo "test er nu $test<br>";
?>
vil give:
test er nu 1
local er nu 2
test er nu 1
local er nu 2
test er nu 2
/Henning
| |
scootergrisen (13-09-2010)
| Kommentar Fra : scootergrisen |
Dato : 13-09-10 08:49 |
|
Ok tak.
| |
|
|