Multisort output ??
ik ben aan het proberen een multidimensionele array te sorteren. Ik heb volgende code bijeen die volgens de var_dump wel perfect sorteerd maar ik krijg de output niet zoals het zijn moet :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
function msort($array, $id="bedrag") {
$temp_array = array();
while(count($array)>0) {
$lowest_id = 0;
$index=0;
foreach ($array as $item) {
if ($item[$id]<$array[$lowest_id][$id]) {
$lowest_id = $index;
}
$index++;
}
$temp_array[] = $array[$lowest_id];
$array = array_merge(array_slice($array, 0,$lowest_id), array_slice($array, $lowest_id+1));
}
return $temp_array;
}
$array[] = array("name"=>"test1","bedrag"=>"11500");
$array[] = array("name"=>"test2","bedrag"=>"14500");
$array[] = array("name"=>"test3","bedrag"=>"13500");
$array[] = array("name"=>"test4","bedrag"=>"12500");
$array[] = array("name"=>"test5","bedrag"=>"2500");
$array[] = array("name"=>"test6","bedrag"=>"22500");
var_dump( msort($array),"bedrag");
echo '<br>';
echo 'value 0:'.$array[0]['bedrag'].'/'.$array[0]['name'].'</br>';
echo 'value 1:'.$array[1]['bedrag'].'/'.$array[1]['name'].'</br>';
echo 'value 2:'.$array[2]['bedrag'].'/'.$array[2]['name'].'</br>';
echo 'value 3:'.$array[3]['bedrag'].'/'.$array[3]['name'].'</br>';
echo 'value 4:'.$array[4]['bedrag'].'/'.$array[4]['name'].'</br>';
echo 'value 5:'.$array[5]['bedrag'].'/'.$array[5]['name'].'</br>';
?>
function msort($array, $id="bedrag") {
$temp_array = array();
while(count($array)>0) {
$lowest_id = 0;
$index=0;
foreach ($array as $item) {
if ($item[$id]<$array[$lowest_id][$id]) {
$lowest_id = $index;
}
$index++;
}
$temp_array[] = $array[$lowest_id];
$array = array_merge(array_slice($array, 0,$lowest_id), array_slice($array, $lowest_id+1));
}
return $temp_array;
}
$array[] = array("name"=>"test1","bedrag"=>"11500");
$array[] = array("name"=>"test2","bedrag"=>"14500");
$array[] = array("name"=>"test3","bedrag"=>"13500");
$array[] = array("name"=>"test4","bedrag"=>"12500");
$array[] = array("name"=>"test5","bedrag"=>"2500");
$array[] = array("name"=>"test6","bedrag"=>"22500");
var_dump( msort($array),"bedrag");
echo '<br>';
echo 'value 0:'.$array[0]['bedrag'].'/'.$array[0]['name'].'</br>';
echo 'value 1:'.$array[1]['bedrag'].'/'.$array[1]['name'].'</br>';
echo 'value 2:'.$array[2]['bedrag'].'/'.$array[2]['name'].'</br>';
echo 'value 3:'.$array[3]['bedrag'].'/'.$array[3]['name'].'</br>';
echo 'value 4:'.$array[4]['bedrag'].'/'.$array[4]['name'].'</br>';
echo 'value 5:'.$array[5]['bedrag'].'/'.$array[5]['name'].'</br>';
?>
en dit geeft volgende output in mijn browser :
/*
Ex: array(6) { [0]=> array(2) { ["name"]=> string(5) "test5" ["bedrag"]=> string(4) "2500" } [1]=> array(2) { ["name"]=> string(5) "test1" ["bedrag"]=> string(5) "11500" } [2]=> array(2) { ["name"]=> string(5) "test4" ["bedrag"]=> string(5) "12500" } [3]=> array(2) { ["name"]=> string(5) "test3" ["bedrag"]=> string(5) "13500" } [4]=> array(2) { ["name"]=> string(5) "test2" ["bedrag"]=> string(5) "14500" } [5]=> array(2) { ["name"]=> string(5) "test6" ["bedrag"]=> string(5) "22500" } } string(6) "bedrag"
value 0:11500/test1
value 1:14500/test2
value 2:13500/test3
value 3:12500/test4
value 4:2500/test5
value 5:22500/test6
*/
Zoals je kunt zien is de var dump gesorteerd zoals ik wil (op bedrag) maar de output van de array is niet gesorteerd. Ik ben blijkbaar niet genoeg thuis in deze zaken , doe ik iets verkeerd ?
alvast bedankt
Bart
Gewijzigd op 01/01/1970 01:00:00 door Bart
Wat je kunt doen is de volgende regel toevoegen onder je var_dump:
$array = msort($array);
Een voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL);
$array = array (
'een' => range (1, 3),
'twee' => range (4, 6),
'drie' => range (7, 9)
);
array_multisort (
$array, SORT_STRING, SORT_DESC,
$array['een'], SORT_NUMERIC, SORT_DESC,
$array['twee'], SORT_NUMERIC, SORT_DESC,
$array['drie'], SORT_STRING, SORT_ASC
);
echo '<pre>';
print_r ($array);
echo '</pre>';
?>
ini_set ('display_errors', 1);
error_reporting (E_ALL);
$array = array (
'een' => range (1, 3),
'twee' => range (4, 6),
'drie' => range (7, 9)
);
array_multisort (
$array, SORT_STRING, SORT_DESC,
$array['een'], SORT_NUMERIC, SORT_DESC,
$array['twee'], SORT_NUMERIC, SORT_DESC,
$array['drie'], SORT_STRING, SORT_ASC
);
echo '<pre>';
print_r ($array);
echo '</pre>';
?>
Let op; op deze pagina worden bij voorbeeld 260 de argumenten in de verkeerde volgorde meegegeven. Je geeft eerst de array, dan de sorteermethode en dan pas de sorteervolgorde op. Dat is in ieder geval de enige manier waarop ik hem werkend krijg. De output van bovenstaand voorbeeld is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Array
(
[drie] => Array
(
[0] => 9
[1] => 8
[2] => 7
)
[twee] => Array
(
[0] => 6
[1] => 5
[2] => 4
)
[een] => Array
(
[0] => 3
[1] => 2
[2] => 1
)
)
(
[drie] => Array
(
[0] => 9
[1] => 8
[2] => 7
)
[twee] => Array
(
[0] => 6
[1] => 5
[2] => 4
)
[een] => Array
(
[0] => 3
[1] => 2
[2] => 1
)
)
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Ja, dat is zijn eigen gemaakte functie. Zie openingspost.
Klopt ;-) Ik heb mijn post geëedit.