Menü

  Login

  Shoutbox

  Forum » Fragen zu Ilch » Andere Dinge » Platzierung im Array hinzufügen


Platzierung im Array hinzufügen
MiBo73
Jungspund

User Pic

Posts: 45
# 16.09.2012 - 22:26:09
    zitieren



Hallo,

ich hoffe dazu gibt es nicht schon etwas, gefunden habe ich zumindest nichts.

Also ich habe aus einer mysql-Datenbank eine Table erstellt.
Spalten sind a, b und c.
Diese habe ich in ein Array gepackt und die Werte Addiert und hinzugefügt als Gesammt.
Nun kommt das Problem, die Spalte A hat mal Bezeichnungen und mal Zahlen.
Wie kann ich die Zahlen von 1 bis x, der Größe nach, durchnummrieren?

Als Beispiel:
 Code
1:
2:
3:
4:
5:
6:
 A   B   C  ges  Sollwert:
1   1   1   3     4
bh  -   -   -   
2   2   2   6     1
3   1   1   5     2
1   2   1   4     3


Die Reihenfolge soll nicht verändert werden.

A, B, C sind aus der mysql-Table, ges ist die Summe von A, B, und C und wird beim Auslesen als weiterer Wert in dem Array gespeichert.
Der Array soll so überprüft werden, dass die Summen aus A, B und C ein weiteren Wert bekommen, wenn sie eine Zahl beinhalten.
Für Die höchste Summe kommt eine 1 dabei, für die niedrigste eine 4 (zumindest im Beispiel).

Gruß und schon mal Danke,
Michael


Zuletzt modifiziert von MiBo73 am 16.09.2012 - 22:27:23
Mairu
Administrator

User Pic

Posts: 1908
# 17.09.2012 - 13:15:12
    zitieren



Hi, hab mal den Code für das was du willst, soweit ich das verstanden habe geschrieben.

Dabei ist aber zu beachten, dass wenn Summen nicht eindeutig sind, also z.B. es gibt 2 mal 3, dann wird nicht für beide der gleiche Sollwert berechnet.

 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:
39:
40:
41:
42:
43:
44:
45:
46:
47:
  <?php
$database 
= array(
    array(
'a' => 1'b' => 1'c' => 1),
    array(
'a' => 'bh''b' => '''c' => ''),
    array(
'a' => 2'b' => 2'c' => 2),
    array(
'a' => 3'b' => 1'c' => 1),
    array(
'a' => 1'b' => 2'c' => 1)
);

/*
A   B   C  ges  Sollwert:
1   1   1   3     4
bh  -   -   -   
2   2   2   6     1
3   1   1   5     2
1   2   1   4     3
 */


$i 0;
$data = array();
$sumOrder = array();
//wie while über Datenbank
foreach ($database as $row) {
    if (
is_int($row['a']) || ctype_digit($row['a'])) {
        
$sum $row['a'] + $row['b'] + $row['c'];
        
$sumOrder[$i] = $sum;
    } else {
        
$sum '';
    }
    
$row['sum'] = $sum;
    
$data[$i] = $row;
    
$i++;
}

//Summen sortieren, wobei Keys erhalten bleiben
asort($sumOrder);
$soll count($sumOrder);
//Sollwerte zuordnen, (geht nur solange jede sum nur einmal vorkommt gut)
foreach ($sumOrder as $key => $value) {
    
$data[$key]['soll'] = $soll;
    
$soll--;
    
}

var_dump($data);
MiBo73
Jungspund

User Pic

Posts: 45
# 17.09.2012 - 13:42:41
    zitieren



Danke schon mal dafür.

Problem ist, es soll für eine Tunierübericht dienen, in der es 3 Kategorien gibt, Da die Summe der Punkte schnell mal gleich wird, denke ich, es ist einfacher, wenn ich für die Platzierung eine weitere Spalte in der table anlegen.