[php] brauche Denkanstoß zu Arrays => Ausgabe

Goltergaul

Well-known member
ID: 17553
L
26 April 2006
480
7
Hi ich habe hier folgendes Array:
Code:
array(2) {
  [20]=>
  array(2) {
    ["Nod-Mot"]=>
    int(4)
    ["Transporthubschrauber"]=>
    int(1)
  }
  [32]=>
  array(2) {
    ["Nod-Mot"]=>
    int(4)
    ["Soldat"]=>
    int(12)
  }
}

Das Array stellt zwei versch Truppenverbände eines Spielers dar, mit jewils den Zugehörigen einheiten. Im Spiel selbst gibt es an die 40 Einheiten.

Jetzt möchte ich eine Ausgabe im folgenden Format machen:
id |Soldat|Nod-Mot|Transporthubschrauber
20|0 | 4 | 1
32|12 | 4 | 0

Also eine Tabelle die so viele Spalten hat, wie verschiedene Einheiten in allen Truppen vorkommen.

Hat da jemand eine Idee für eine saubere Lösung? Steh diesbezüglich grade aufm Schlauch, hab schon einiges mit foreachs etc versucht...

Also auf die Anzahl der Spalten und deren Namen bin ich bereits gekommen, jedoch habe ich probleme die Ausgabe der Anzahlen zu gestalten im Falle der ID 20. Durch die 0 an erster Stelle (Fehlendes Array) war bei mir alles um eine Spalte verschoben :/
 
mag sein, dass ich jetzt nicht das gesamte Problem erkannt habe, aber kannst du das nicht mit foreach() lösen ?
 
ja daran bastel ich ja wie gesagt die ganze Zeit rum ;) Ich poste in ein paar Minuten mal einen Ansatz ;)

Edit:
$tpl_units ist obiges Array
Code:
<table style="border: 1px dotted #000000; margin-left:5px; font-size:15px;">
      <tr>
      <?
      $troops = mysql_query("SELECT name FROM ".$config_prefix."units WHERE team=".$team." OR team=2", $handler);
      while($sq = mysql_fetch_array($troops)) {
            $echo=false;
            foreach($tpl_units as $key => $value) {  
                  foreach($value as $name => $anzahl) {
                        if($anzahl > 0 AND $name == $sq['name']) {
                              $echo=true;
                              break;
                        }
                  }
            }
            if($echo == true) {
                  echo "<td>".$sq['name']."</td>";
            } else {
                  echo "<td></td>";
            }
      }
      ?>
      </tr>
      <?
      foreach($tpl_units as $key => $value) {
      echo "<tr>";
      $troops = mysql_query("SELECT id, name FROM ".$config_prefix."units WHERE team=".$team." OR team=2", $handler);
      while($sq = mysql_fetch_array($troops)) {
            $echo=0;
            foreach($value as $name => $anzahl) {
                  if($anzahl > 0 AND $name == $sq['name']) {
                        $echo=1;
                        break;
                  }
            }
            if($echo == 1) {
                  echo "<td>".$anzahl."</td>";
            } else {
                  echo "<td></td>";
            }
      }

      echo "</tr>";
      }
      ?>
</table>

ergibt:
Code:
<table style="border: 1px dotted #000000; margin-left:5px; font-size:15px;">
      <tr>

      <td></td><td>Nod-Mot</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>Soldat</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>Transporthubschrauber</td>      </tr>
      <tr><td></td><td>4</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td></td><td>4</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>12</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

Wie man sieht ists nicht gerade brauchbar^^
 
1. kommen über daten aus der Datenbank?
2. wie sieht es aus mit zwischen-ausgaben?
3. trenne doch bitte HTML von PHP-Code mit Hilfe eines Template-Systems, du wirst sehen, das debuggen und entwickeln ist viel einfacher

Edit: ich habe mal deinen code getestet und die Bedingung weshalb das nicht funzt muss $name == $sq['name'] sein (hättest du aber auch mit 2 echos rausfinden können)
 
Zuletzt bearbeitet:
Zu 1: Naja war mein Zusätzlicher Ansatz. Also das Array kommt auch aus der Datenbank
Zu 2: Ja hab da schon ewig rumprobiert. Aber ich denke der Ansatz ist falsch :/
Zu 3: Benutze ich, bin nur am testen ;)
Zum Edit: Nein dann werden alle Einheiten ausgegeben, die es gibt (die kommen durch den Query) und gerade dass will ich ja vermeiden.

Edit: Ich habs geschafft *gg*
PHP:
$temp_array=array();
      foreach($tpl_units as $id => $array) {
            ${"temp_".$id}="";
            foreach($array as $name => $anzahl) {
                  if(!in_array($name,$temp_array)){
                        echo "<td>$name</td>";
                        array_push($temp_array,$name);
                  }
            }
      }
      foreach($tpl_units as $id => $array) {
            echo "<tr>";
            foreach($temp_array as $name) {
                  if(empty($tpl_units[$id][$name]))
                        echo '<td>0</td>';
                  else
                        echo '<td>'.$tpl_units[$id][$name].'</td>';
            }
            echo "</tr>";
      }

Jetzt stellt sich nurnoch die Frage obs auch schöner geht?
 
Zuletzt bearbeitet: