Rocco: Schleife zählt nicht

Hallo,

Mit folgendem Script möchte ich erreichen, dass bestimmte Tabellen einer Datenbank nicht angezeigt werden. Dazu möchte ich '$arr_tablenames[$i]' mit $array[$ii] vergleichen.
Ich finde aber weder mit 'for' oder 'while' eine Möglichkeit dieses zu realisieren. Mit 'if' kommt kommt es soweit ganz gut hin, nur zählt '$array[$ii]' anscheinend nicht hoch.
Was denkt Ihr, was ist das Problem - der Fehler?

Danke für eure Hilfe!

Rocco

<?php

$dbname = "admin";
$loginname = "ABC";
$loginpass = "xyz";
$dbhost = "localhost";

$db = @mysql_connect($dbhost, $loginname, $loginpass);
$tables = @mysql_list_tables($dbname, $db);
$num_tables = mysql_num_rows($tables);
$arr_tablenames[] = '';

for ($i=0; $i < $num_tables; $i++) {
$arr_tablenames[$i] = mysql_tablename($tables, $i);
}

// Tabellen die nicht angezeigt werden sollen

$array = array('reluserhardware', 'rechnerDaten', 'geraete', 'user');

$num_array = count($array);

// Ausgabe aller Tabellen - der in '$array' benannten

$ii = 0;
for ($i = 0; $i < $num_tables; $i++){
if ($ii < $num_array){
if ($arr_tablenames[$i] == $array[$ii]){
echo $arr_tablenames[$i]," <= verbergen<br>";
$ii++;
}else{
echo $arr_tablenames[$i],"<br>";
}
}
}
echo "<hr>";
?>

  1. Hi,

    for ($i = 0; $i < $num_tables; $i++){
    if ($ii < $num_array){
    if ($arr_tablenames[$i] == $array[$ii]){
    echo $arr_tablenames[$i]," <= verbergen<br>";
    $ii++;
    }else{
    echo $arr_tablenames[$i],"<br>";
    }
    }
    }

    die Variable $ii wird nur hochgezählt wenn
    $arr_tablenames[$i] == $array[$ii]
    ist das so gewollt?

    gruss
    horst

    1. Hi,

      »»....

      die Variable $ii wird nur hochgezählt wenn
      $arr_tablenames[$i] == $array[$ii]
      ist das so gewollt?

      gruss
      horst

      Hallo,

      also ich weiss nicht so recht wie ich es erklären soll, habe aber noch schnell was geschrieben das mein Ziehl vielleicht deutlicher macht.

      for ($i = 0; $i < $num_tables; $i++){
      if ($arr_tablenames[$i] == 'reluserhardware'||
          $arr_tablenames[$i] == 'rechnerDaten'||
          $arr_tablenames[$i] == 'geraete'||
          $arr_tablenames[$i] == 'user'){
      echo $arr_tablenames[$i]," <= verbergen<br>";
      }else{
      echo $arr_tablenames[$i],"<br>";
      }
      }

      Rocco

  2. hio,

    PHP bietet in Sachen array eine Menge Funktionen, daher lohnt sich immer in Blick ins PHP-Manual. Als Tipp (für Windows-Systeme) kann ich die Windowshilfe empfehlen. Ist einiges angenehmer als die HTML- oder PDF-Version. Wobei ich eigentlich meistens auf php.net online lese, vorallem schon wegen der z.T. recht nützlichen userhinweise.

    Eine array-Funktion ist z.b. array_diff[1], welche die Unterschiede zwischen zwei Arrays finden, also die Element, die nicht in beiden vorkommen. So könntest du deine komplette Schleife mit einer Funktion evtl abdecken.

    [1] http://www.php.net/manual/de/function.array-diff.php

    gl & hf

    Thorsten

    1. Hi

      Eine array-Funktion ist z.b. array_diff[1], welche die Unterschiede zwischen zwei Arrays finden, also die Element, die nicht in beiden vorkommen. So könntest du deine komplette Schleife mit einer Funktion evtl abdecken.

      [1] http://www.php.net/manual/de/function.array-diff.php

      oder Du schreibst die Array-Elemente als Schlüssel und nicht als Value und prüfst dann mit
      http://www.php.net/manual/de/function.array-key-exists.php

      gruss
      horst

  3. Mit folgendem Script möchte ich erreichen, dass bestimmte Tabellen einer Datenbank nicht angezeigt werden. Dazu möchte ich '$arr_tablenames[$i]' mit $array[$ii] vergleichen.

    $array = array('reluserhardware', 'rechnerDaten', 'geraete', 'user');

    $num_array = count($array);

    // Ausgabe aller Tabellen - der in '$array' benannten

    Vorneweg: Du solltest Dir als erstes mal angewöhnen, wenn schon nicht für Dich, dann doch wenigstens für die Öffentlichkeit etwas Struktur in Deinen Code zu bringen.

    1 $ii = 0;
       2 for ($i = 0; $i < $num_tables; $i++)
       3  {
       4   if ($ii < $num_array)
       5     {
       6      if ($arr_tablenames[$i] == $array[$ii])
       7        {
       8         echo $arr_tablenames[$i]," <= verbergen<br>";
       9         $ii++;
      10        }
      11       else
      12        {
      13         echo $arr_tablenames[$i],"<br>";
      14        };
      15     };
      16  };

    ..dann wäre Dir vielleicht auch aufgefallen, wo genau $ii eigentlich erhöht wird und warum das nicht passiert. Solange der aktuelle Tabellenname nicht mit dem ersten, nicht auszugebenen Namen übereinstimmt (Zeile 6), wird $ii auch nicht erhöht (Zeile 9).

    Du brauchst schon eine zweite Schleife, um den aktuellen Namen mit _allen_ Einträgen der nicht auszugebenden zu vergleichen. Oder, schneller und einfacher, eine Funktion namens in_array(): http://www.php.net/manual/de/function.in-array.php.

    Gruß,
      soenk.e

    PS: Den faux-pas in der Mitte von Zeile 8 lassen wir mal unter den Tisch fallen :)

  4. Hallo,

    // Ausgabe aller Tabellen - der in '$array' benannten

    for ($i = 0; $i < $num_tables; $i++) {

    if (!in_array($arr_tablenames[$i], $array)) {
               echo $arr_tablenames[$i].'<br />';
           }

    }

    http://www.php.net/manual/en/function.in-array.php

    Gruß,
    dimde