Frage : Sortieren von Reihe durch Gruppe

hallo, auftritt das

i morgens versuchend, eine Reihe vereinigende Reihen zu sortieren, basiert auf einer des keys.

if, das der Wert des Schlüssels ein ursprüngliches, normales Sortieren ist - dieses bearbeitet fine.

if der Wert des Schlüssels eine Reihe ist t, ich möchte sie durch „Gruppen "

some Beispielcode sortieren lassen ist attached

the sorted_by_name Spitze ist fein - aber für sorted_by_list, was ich zurückgegangen wünsche, ist die ganze Reihe, die bestellt, wie folgt:

all die mit „1“ (oder dem niedrigsten, wenn keine „1“ haben), in ihm ist Listenwert zuerst, dann jenes haben ganzes Bleiben das das folgende höchste („2“), etc.

so im Augenblick, die Rückkehr für sort_by_list aussehen wie dieses:

Array
(
[0] => Array
(
[Namens] => g
[Liste] => Array
(
[0] => 1
)

)

[1] => Array
(
[Namens] => f
[Liste] => Array
(
[0] => 2
)

)

[2] => Array
(
[Namens] => b
[Liste] => Array
(
[0] => 3
)

)

[3] => Array
(
[Namens] => h
[Liste] => Array
(
[0] => 1
[1] => 2
)

)

[4] => Array
(
[Namens] => a
[Liste] => Array
(
[0] => 1
[1] => 3
)

)

[5] => Array
(
[Namens] => e
[Liste] => Array
(
[0] => 2
[1] => 3
)

)

[6] => Array
(
[Namens] => d
[Liste] => Array
(
[0] => 3
[1] => 4
)

)

[7] => Array
(
[Namens] => c
[Liste] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)

)

)


whereas, das ich wurde wie zurück erhalten:


Array
(
[0] => Array
(
[Namens] => g
[Liste] => Array
(
[0] => 1
)

)

[1] => Array
(
[Namens] => h
[Liste] => Array
(
[0] => 1
[1] => 2
)

)

[2] => Array
(
[Namens] => c
[Liste] => Array
(
[0] => 1
                    [1] => 2
[2] => 3
[3] => 4
)

)

[3] => Array
(
[Namens] => a
[Liste] => Array
(
[0] => 1
[1] => 3
)

)

[4] => Array
(
[Namens] => f
[Liste] => Array
(
[0] => 2
)

)

[5] => Array
(
[Name] => e
[Liste] => Array
(
[0] => 2
[1] => 3
)

)

[6] => Array
(
[Namens] => b
[Liste] => Array
(
[0] => 3
)

)

[7] => Array
(
[Namens] => d
[Liste] => Array
(
[0] => 3
[1] => 4
)

)

)
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:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
 „h“, „Liste“ => Reihe (1.2));
$data [] = Reihe („Name“ => „g“, „Liste“ => Reihe (1));
$data [] = Reihe („Name“ => „a“, „Liste“ => Reihe (1.3));
$data [] = Reihe („Name“ => „f“, „Liste“ => Reihe (2));
$data [] = Reihe („Name“ => „e“, „Liste“ => Reihe (2.3));
$data [] = Reihe („Name“ => „b“, „Liste“ => Reihe (3));
$data [] = Reihe („Name“ => „c“, „Liste“ => Reihe (1.2.3.4));
$data [] = Reihe („Name“ => „d“, „Liste“ => Reihe (3.4));

Funktion deep_sort ($array, $sorton) {
	
	usort ($array, Funktion ($a, $b) Gebrauch ($sorton) {
	
		$a = $a [$sorton];
		$b = $b [$sorton];
		
		wenn (is_array ($a) && is_array ($b)) {
		
			// diese Spitze ist - nur eingeschlossen zu den illustrativen Zwecken offensichtlich defekt
			$a = implodieren ('', $a);
			$b = implodieren ('', $b);
			
		}
		
		zurückgehen ($a == $b)? 0: ($a > $b)? 1: -1;
	
	});
	
	Rückhol$array;

}

$sorted_by_name = deep_sort ($data, „Name ");

Druck „
“;

print_r ($sorted_by_name);

Druck „
“; $sorted_by_list = deep_sort ($data, „Liste "); Druck „
“;

print_r ($sorted_by_list);

Druck „
“; ? >

Antwort : Sortieren von Reihe durch Gruppe

Dieses vorbei schauen und sehen, wenn es Ihnen sinnvoll ist.  Am besten, ~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:
6:
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“, „Liste“ => Reihe (1.2));
$data [] = Reihe („Name“ => „g“, „Liste“ => Reihe (1));
$data [] = Reihe („Name“ => „a“, „Liste“ => Reihe (1.3));
$data [] = Reihe („Name“ => „f“, „Liste“ => Reihe (2));
$data [] = Reihe („Name“ => „e“, „Liste“ => Reihe (2.3));
$data [] = Reihe („Name“ => „b“, „Liste“ => Reihe (3));
$data [] = Reihe („Name“ => „c“, „Liste“ => Reihe (1.2.3.4));
$data [] = Reihe („Name“ => „d“, „Liste“ => Reihe (3.4));


// EINE FUNKTION, ZUM DURCH NAMES ZU VERGLEICHEN
Funktion cmp_name ($a, $b)
{
    wenn ($a [„Name“] == $b [„Name“]) Rückkehr 0;
    zurückgehen ($a [„Name“] <> $arr)
{
    $test [$ptr] [„Gruppe“] = implodieren ('', $arr [„Liste“]);
    wenn (strlen ($test [$ptr] [„Gruppe“]) > strlen $maxlen) $maxlen = ($test [$ptr] [„Gruppe“]);
}

//-AUFLAGE DIE GRUPPEN ZUR GLEICH BLEIBENDEN LÄNGE
foreach ($test als $ptr => $arr)
{
    $test [$ptr] [„Gruppe“] = str_pad ($test [$ptr] [„Gruppe“], $maxlen+1, „0“);
}

//-ART AUF GRUPPEN
usort ($test, „cmp_group ");

// ENTFERNEN DIE GRUPPEN (WENN ERFORDERLICH)
foreach ($test als $ptr => $arr)
{
    unset ($test [$ptr] [„Gruppe“]);
}

//-ERSCHEINEN DAS ARBEITS-PRODUKT
var_dump ($test);
Weitere Lösungen  
 
programming4us programming4us