Vraag : sorterende serie door groep

hallo,

i am is een serie van associatieve die series proberen te sorteren, op één van keys.

if de waarde van de sleutel primitief, het normale komt sorteren - dit werk fine.

if de waarde van de sleutel is een serie, zou ik het willen hebben gesorteerd door „groepen "

some- voorbeeldcode ben attached

the ben fijn - maar voor sorted_by_list voor, welk ik teruggekeerd ben al als volgt bevolen serie wil:

die allemaal met „1“ (of het laagst als niets „1“) heeft daarin is eerst lijstwaarde, dan kijken die allemaal die die volgende het hoogst („2“) hebben op dit ogenblik blijven, etc.

so, de winst voor sort_by_list als dit:

Array
(
[0] => Array
(
[naam] => g
[lijst] => Array
(
[0] => 1
)

)

[1] => Array
(
[naam] => f
[lijst] => Array
(
[0] => 2
)

)

[2] => Array
(
[naam] => b
[lijst] => Array
(
[0] => 3
)

)

[3] => Array
(
[naam] => h
[lijst] => Array
(
[0] => 1
[1] => 2
)

)

[4] => Array
(
[naam] => a
[lijst] => Array
(
[0] => 1
[1] => 3
)

)

[5] => Array
(
[naam] => e
[lijst] => Array
(
[0] => 2
[1] => 3
)

)

[6] => Array
(
[naam] => d
[lijst] => Array
(
[0] => 3
[1] => 4
)

)

[7] => Array
(
[naam] => c
[lijst] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)

)

)


whereas die ik als om terug te keren:


Array
(
[0] => Array
(
[naam] => g
[lijst] => Array
(
[0] => 1
)

)

[1] => Array
(
[naam] => h
[lijst] => Array
(
[0] => 1
[1] => 2
)

)

[2] => Array
(
[naam] => c
[lijst] => Array
(
[0] => 1
                    [1] => 2
[2] => 3
[3] => 4
)

)

[3] => Array
(
[naam] => a
[lijst] => Array
(
[0] => 1
[1] => 3
)

)

[4] => Array
(
[naam] => f
[lijst] => Array
(
[0] => 2
)

)

[5] => Array
(
[naam] => e
[lijst] => Array
(
[0] => 2
[1] => 3
)

)

[6] => Array
(
[naam] => b
[lijst] => Array
(
[0] => 3
)

)

[7] => Array
(
[naam] => d
[lijst] => Array
(
[0] => 3
[1] => 4
)

)

)
" codeBody "
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:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
 „h“, „lijst“ => serie (1.2));
$data [] = serie („naam“ => „g“, „lijst“ => serie (1));
$data [] = serie („naam“ => 'a', „lijst“ => serie (1.3));
$data [] = serie („naam“ => „F“, „lijst“ => serie (2));
$data [] = serie („naam“ => „e“, „lijst“ => serie (2.3));
$data [] = serie („naam“ => 'b', „lijst“ => serie (3));
$data [] = serie („naam“ => „c“, „lijst“ => serie (1.2.3.4));
$data [] = serie („naam“ => „D“, „lijst“ => serie (3.4));

functie deep_sort ($array, $sorton) {
	
	usort ($array, functie ($a, $b) gebruik ($sorton) {
	
		$a = $a [$sorton];
		$b = $b [$sorton];
		
		als (is_array ($a) is_array && ($b)){
		
			// dit beetje duidelijk ontsierd - slechts inbegrepen voor illustratieve doeleinden is
			$a = implodeer ('', $a);
			$b = implodeer ('', $b);
			
		}
		
		terugkeer ($a == $b)? 0: ($a > $b)? 1: -1;
	
	});
	
	terugkeer $array;

}

$sorted_by_name = deep_sort ($data, „naam“);

druk „
“;

print_r ($sorted_by_name);

druk „
“; $sorted_by_list = deep_sort ($data, „lijst“); druk „
“;

print_r ($sorted_by_list);

druk „
“; ? >

Antwoord : sorterende serie door groep

Kijk dit over en zie of houdt het aan u steek.  Best, ~Ray
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:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
";

// TEST DATA FROM THE POST AT EE
$data[] = array('name' => „h“, „lijst“ => serie (1.2));
$data [] = serie („naam“ => „g“, „lijst“ => serie (1));
$data [] = serie („naam“ => 'a', „lijst“ => serie (1.3));
$data [] = serie („naam“ => „F“, „lijst“ => serie (2));
$data [] = serie („naam“ => „e“, „lijst“ => serie (2.3));
$data [] = serie („naam“ => 'b', „lijst“ => serie (3));
$data [] = serie („naam“ => „c“, „lijst“ => serie (1.2.3.4));
$data [] = serie („naam“ => „D“, „lijst“ => serie (3.4));


// EEN FUNCTIE DOOR NAMEN TE VERGELIJKEN
functie cmp_name ($a, $b)
{
    als ($a [„naam“] == $b [„naam“]) terugkeer 0;
    terugkeer ($a [„naam“] <> $arr)
{
    $test [$ptr] [„groep“] = implodeer ('', $arr [„lijst“]);
    als (strlen ($test [$ptr] [„groep“]) > strlen $maxlen) $maxlen = ($test [$ptr] [„groep“]);
}

// PAD DE GROEPEN AAN VERENIGBARE LENGTE
foreach ($test als $ptr => $arr)
{
    $test [$ptr] [„groep“] = str_pad ($test [$ptr] [„groep“], $maxlen+1, „0“);
}

// SOORT OP GROEPEN
usort ($test, „cmp_group“);

// VERWIJDERT DE GROEPEN (INDIEN NODIG)
foreach ($test als $ptr => $arr)
{
    unset ($test [$ptr] [„groep“]);
}

// TOONT HET PRODUCT VAN HET WERK
var_dump ($test);
Andere oplossingen  
 
programming4us programming4us