2017-04-02 2 views
1

Hallo habe ich ein PHP-Array wie diesePHP Kreuztabellen- Formatierung von Array

$table=array(); 
$subject_names=array(); 

$subject_names[118]="English"; 
$subject_names[108]="Software Engeneering"; 

$table['Josh'][118]['int'] =55; 
$table['Josh'][118]['ext'] = 10; 
$table['Josh'][108]['int'] =45; 
$table['Josh'][108]['ext'] = 12; 

$table['Matt'][118]['int'] =45; 
$table['Matt'][118]['ext'] = 12; 
$table['Matt'][108]['int'] =50; 
$table['Matt'][108]['ext'] = 15; 

Hier 118 und 108 sind subject_id Ich versuche, es zu formatieren, wie diese

student |  English   | Software Engeneering | 
      | int. mark | ext. mark | int. mark | ext. mark | 
    ___________________________________________________________ 
    Josh | 55  | 10   | 45  | 12 
    Matt | 45  | 12   | 50  | 15 

I

versucht
echo "Student Name\t"; 

foreach($subject_names as $sub_name) 
{ 
    echo "$sub_name\t"; 
} 
echo "<br>";  

foreach($table as $sname => $subjects){ 

    echo "$sname\t"; 

    foreach($subjects as $subject_name => $types) 
    { 
     foreach($types as $marks) 
     { 
      echo "$marks\t"; 
     } 
    } 
    echo "<br>"; 

} 

Es funktioniert gut, aber wenn ich die Position des Array-Element der Tabelle wie

ändern
$table['Josh'][118]['int'] =55; 
$table['Josh'][108]['int'] =45; 
$table['Josh'][118]['ext'] = 10; 
$table['Josh'][108]['ext'] = 12; 

Es gibt kein korrektes Ergebnis. Gibt es trotzdem, dass das Ergebnis immer korrekt ist?

Vielen Dank für Ihre jede mögliche Hilfe und Anregungen

+0

Ich gehe davon aus, dass Sie ** diese Werte nicht standardmäßig hart kodieren, sondern aus einer Datenbank ziehen? Das Problem, das Sie hier haben, ist, dass Sie erwarten, dass alles in bester Ordnung ist. Wenn Sie erwarten, dass etwas nicht in Ordnung ist, müssen Sie es zuerst sortieren. Wenn das ein Fall ist, den Sie erwarten, dann gebe ich Ihnen gerne weitere Hilfe, wenn Sie es brauchen. – Augwa

+0

Ja genau ich ziehe diesen Wert aus der Datenbank. Ich werde Ihre Hilfe sehr schätzen. – sanu

+0

Ok, also müssen Sie nur sicherstellen, dass Sie Ihre Datenbankwerte korrekt sortieren ... d. H. 'ORDER BY student, class_id, mark_type' – Augwa

Antwort

0

Hier ist eine Lösung, die ich für Ihre Anfrage geschrieben, die Noten Kommissionierung der $subject_names als Kontrolle verwendet, anstatt die Spielberichtsbogen Schüler (ich hoffe, Sie bekommen, was ich meine, nachdem sie durch die Codes) ...

$table=array(); 
$subject_names=array(); 

// notice that I switched subject order, just to show that subjects control the marks displayed thereby ensuring consistent score mapping 
$subject_names[108]="Software Engeneering"; 
$subject_names[118]="English"; 

// and I'm using the rearranged scores (the sample use-case you specified in the question that distorts your output) 
$table['Josh'][118]['int'] =55; 
$table['Josh'][108]['int'] =45; 
$table['Josh'][118]['ext'] = 10; 
$table['Josh'][108]['ext'] = 12; 

$table['Matt'][118]['int'] =45; 
$table['Matt'][118]['ext'] = 12; 
$table['Matt'][108]['int'] =50; 
$table['Matt'][108]['ext'] = 15; 

echo "Student Name\t"; 

foreach($subject_names as $sub_name) 
{ 
    echo "$sub_name\t"; 
} 
echo "\n"; 

// proposed solution: 
foreach($table as $sname => $subjects){ 

    echo "$sname\t"; 

    foreach ($subject_names as $subject_id => $name) { 

     foreach ($subjects[$subject_id] as $mark) { 
      echo "$mark\t"; 
     } 
    } 
    echo "\n"; 

} 

Hier ist die Ausgabe des Skripts über ...

Student Name Software Engeneering English 
Josh 45 12 55 10 
Matt 50 15 45 12 

die gleichen Daten, die durch das Skript ausführen in der Frage zur Verfügung gestellt, hier ist der Ausgang (verzerrt) ...

Student Name Software Engeneering English 
Josh 55 10 45 12 
Matt 45 12 50 15 

P. S: 'Engeneering' sollte

Ich hoffe, ich war hilfreich 'Engineering' sein. Prost!

+0

Die Korrektur der Reihenfolge seiner Daten hilft ihm nicht. Das Problem ist, wenn Daten nicht in Ordnung sind. – Augwa

+0

Bitte lesen Sie die Codes ... Ich ordnete die Daten neu, um zu zeigen, dass mein Algorithmus von der Reihenfolge der Daten nicht betroffen ist * * –

+0

Nicht nett zu downvote, was Sie nicht verstehen @Augwa –