Ausgeben des Inhalt eines Arrays

philishake

javascript enthusiast
Hi Leute,

ichhabe folgendes Problem, ich habe ein array (bsp. $welt). In diesem Array sind mehrere Werte gespeichert (z.b. Name, Poulation, Position). Wenn ich diese Werte nun auslesen will tue ich einfach folgendes:

PHP:
$welt = array();
$welt['name']       = "Erde";
$welt['population'] = "6 Milliarden";
$welt['position']   = "Sonnensystem";

print("MIT DIREKTEN NAMEN<br>");
print("Weltname: ".$welt['name']."<br>");
print("WeltPopu: ".$welt['population']."<br>");
print("WeltPosi: ".$welt['position']."<br>");

Das funktioniert auf wunderbar. Wenn ich jetzt aber nicht genau weiß welches ich ausgeben will und das dynamisch gestalten will, oder einfachden gesamten Inhalt mit Hilfe einer FOR oder WHILE Schleife ausgeben will, gibt es Probleme:

PHP:
print("MIT INDEX ZAHLEN<br>");
print("Weltname: ".$welt[0]."<br>");
print("WeltPopu: ".$welt[1]."<br>");
print("WeltPosi: ".$welt[2]."<br>");

Obwohl das meiner Meinung nach funktionieren müsste. Weiß jemand Rat?

Vielen Dank schonmal im voraus,

philishake
 
Das witzige daran ist, wenn ich ne MySQL Abfrage habe in der ich mittels $row Werte aus meiner Datenbank auslese, dann funktioniert es!

Bsp: Datanebank WELT mit den Spalten NAME, POPULATION, POSITION

Das gibt alles korrekt aus:
PHP:
$result = @mysql_query($query);
if(@mysql_num_rows($result)) 
{
   while($row = mysql_fetch_assoc($result)) 
   {
      $name= $row[$row['name'];
      $population= $row[$row['population'];
      $posi= $row[$row['position'];
      sql_disconnect();
    }
}

Und das auch!:
PHP:
$result = @mysql_query($query);
if(@mysql_num_rows($result)) 
{
   while($row = mysql_fetch_assoc($result)) 
   {
      $name= $row[0];
      $population= $row[1];
      $posi= $row[2];
      sql_disconnect();
    }
}
 
Mein ganz konkretes Problem ist eigenlicht folgendes:

Ich habe ein array $build. Dieses Array ist mehrdiemensional.

Bsp:
PHP:
// Headquarter
$build['hq']['iron']        = 98;
$build['hq']['silver']      = 42;
$build['hq']['size']        = 10;
$build['hq']['duration']    = 2000;
$build['hq']['health']      = 50000;
$build['hq']['name']        = $lang['hq'];
$build['hq']['descr']       = $lang['hq_description'];
$build['hq']['type']        = "hq";
$build['hq']['need_b'][0]   = "hq";
$build['hq']['need_l'][0]   = 0;

In diesem Array sind noch weitere Gebäude vermerkt, sprich diesen Block gibt es noch 8 weitere Male. Alle zusammen stehen sie in einer ini.php. Um den Namen eines beliebigen Gebäude auszugeben habe ich mir folgende Funktion geschrieben:

PHP:
function ReturnBuildingName($tempIdentifier)
{
  global $build;
  
  switch($tempIdentifier)
  {
    case  0: $return = $build[$tempIdentifier]['type']; break;
    case  1: $return = $build[$tempIdentifier]['type']; break;
    case  2: $return = $build[$tempIdentifier]['type']; break;
    case  3: $return = $build[$tempIdentifier]['type']; break;
    case  4: $return = $build[$tempIdentifier]['type']; break;
    case  5: $return = $build[$tempIdentifier]['type']; break;
    case  6: $return = $build[$tempIdentifier]['type']; break;
    case  7: $return = $build[$tempIdentifier]['type']; break;
    case  8: $return = $build[$tempIdentifier]['type']; break;
  }  
  return $return;
}

Leider funktioniert das nicht und es gibt andere Funktionen die auf das RETURN dieser Funktion angewiesen sind. Unter anderem eine Counter Funktion die zählt wie viele Gebäude existieren:

PHP:
function CountAllBuildings()
{
  // recieve global $build
  global $build;
  
  $tempCounter = 0;
  while($build[ReturnBuildingName($tempCounter)]['type'] != "")
  {
    $tempCounter++;
  }
  return $tempCounter;
}

Ich hoffe ich konnte mein Problem verständich darlegen.

philishake
 
Wie bereits gesagt, $wert[0] ist was ganz anderes als $wert['name'].
Ein mySQL Ergebnis liefert dir auch ein komplettes Array mit Integer und String Indexes :)

Bei deinem Beispiel Array hast du folgenden Aufbau:

Code:
array(1) {
  ["hq"]=>
  array(10) {
    ["iron"]=>
    int(98)
    ["silver"]=>
    int(42)
    ["size"]=>
    int(10)
    ["duration"]=>
    int(2000)
    ["health"]=>
    int(50000)
    ["name"]=>
    NULL
    ["descr"]=>
    NULL
    ["type"]=>
    string(2) "hq"
    ["need_b"]=>
    array(1) {
      [0]=>
      string(2) "hq"
    }
    ["need_l"]=>
    array(1) {
      [0]=>
      int(0)
    }
  }
}

Wie du siehst gibt es hier kein Index mit dem Wert 0!
 
was machsten denn du für einen firlefanz sry, aber das geht so echt nicht. Oben hast du eine case-schleife, wo dein case-wert direkt im array wiederverwendet wird...wenn du also case 0 hast, dann gehst du mit der 0 in das array....das ganze geht auch einfach in einer zeile:

function ReturnBuildingName($tempIdentifier)
{
global $build;

return $build[$tempIdentifier]['type']; break;
}

Außerdem hast du doch im array Build als Index' Strings...also kannst du da nicht eine abfrage mit einem integer-wert machen...daher findet er ja nichts, weil es kein $build[0] gibt, sondern $build['hq'] etc
und wenn du dann von $build[$temp...]['type'] den type haben willst, dann musst du zB mit "hq" den Index angeben...der Index ist in dem fall sogar der type - damit wäre das überflüssig ;-)

du solltest deine datenstruktur nochmal überdenken, bzw die funktionalitäten
 
Danke für das viele Feedback. Ich werde alles neu aufbauen mich dabei eurer Hinweise zu bedienen. Danke!
 
Zurück