Thomas Schmieder: array_splice($arr,0,0) in PHP 4.3.1 ist Schrott - oder?

Hi,

bin gerade dabei, unsere ganzen Scripte umzustellen auf die PHP 4.3.1^und muss feststellen, dass nix mehr funktioniert.

erster gemeiner Fehler: man darf die Gültigkeit (Existenz und !false) einer Variablen nicht mehr in einem Schritt abfragen, sondern muss je nach Typ einen Riesen-Umsateiger nehmen.

zweiter Fehler: Die Funktion $neuarray=array_splice($altarr,0,0) löscht leider das gesamte Array. Früher (PHP 4.0.4) konnte man damit bestens ein Reindex des Arrays durchführen, so wie auch im Handbuch beschrieben.

Wer kann  mir helfen ujd ggf. auch noch weitere bekannte Fehler beisteuern. Dann könnte ich noch heute in Verzweiflung geraten, sonst erst frühestens morgen.

Time ist Money...

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  1. Hallo Tom,

    erster gemeiner Fehler: man darf die Gültigkeit (Existenz und !false) einer Variablen nicht mehr in einem Schritt abfragen, sondern muss je nach Typ einen Riesen-Umsateiger nehmen.

    Hä? Hast Du Dein error_reporting richtig eingestellt? ;-) Notices zu nicht existenten Variablen wurden schon zu PHP3-Zeiten ausgegeben - bei entsprechender error_reporting-Einstellung.

    zweiter Fehler: Die Funktion $neuarray=array_splice($altarr,0,0) löscht leider das gesamte Array. Früher (PHP 4.0.4) konnte man damit bestens ein Reindex des Arrays durchführen, so wie auch im Handbuch beschrieben.

    $neuarray = array_merge ($altarr);

    Christian

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
  2. Hi!

    bin gerade dabei, unsere ganzen Scripte umzustellen auf die PHP 4.3.1^und muss feststellen, dass nix mehr funktioniert.

    Liegt voer allem an ein paar veränderten Grundeinstellung in der php.ini, Sachen wie register-globals, error-reporting, und auch das nur <?php akzeptiert wird...

    erster gemeiner Fehler: man darf die Gültigkeit (Existenz und !false) einer Variablen nicht mehr in einem Schritt abfragen, sondern muss je nach Typ einen Riesen-Umsateiger nehmen.

    Wieso? Was machst Du und was passiert? Wie fragst Du die Gültigkeit ab? if(isset($var) && $var!=false) sowas? sollte aber gehen!

    zweiter Fehler: Die Funktion $neuarray=array_splice($altarr,0,0) löscht leider das gesamte Array.

    Klar:

    array array_splice ( array input, int offset [, int length [, array replacement]])

    Als lenght gibst Du 0 an, also wird nach Manual der gesamte Array gegen Replacement ersetzt(da length nicht positiv oder negativ), was Du nicht angegeben hast, also ist der Array leer. IMHO ist array_splice die falsche Funktion für das was Du erreichen willst!

    Früher (PHP 4.0.4) konnte man damit bestens ein Reindex des Arrays durchführen, so wie auch im Handbuch beschrieben.

    4.0.4 ist alt, sehr alt ;-)
    Meinst Du mit reindex einfach die Werte des Arrays in einen neuen Array schreiben mit neuen indices? Dann guck Dir mal: http://php.net/array-values an.

    Wer kann  mir helfen ujd ggf. auch noch weitere bekannte Fehler beisteuern. Dann könnte ich noch heute in Verzweiflung geraten, sonst erst frühestens morgen.

    It's not a bug, it's a feature ;-)

    Grüße
    Andreas

    1. Hi Andreas,

      ich habs gefunden...

      zweiter Fehler: Die Funktion $neuarray=array_splice($altarr,0,0) löscht leider das gesamte Array.

      array_splice() war einfach die falsche Funktion dafür. Das ging zwar in der einen einzigen Version auch, war aber buggy.

      Array_slice($alt,0) ist die richtige Funktion für ein reindex. Dann klappts auch mit den indizierten Arrays, die als Werte wieder ganze assoziative Monsterarrays enthalten.

      Ich wußte doch, dass ich eigentlich noch kann ... Mußte nur erst nen Schluck essen. *gg*

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Hi!

        Array_slice($alt,0) ist die richtige Funktion für ein reindex. Dann klappts auch mit den indizierten Arrays, die als Werte wieder ganze assoziative Monsterarrays enthalten.

        Mich würde interessieren warum Du nicht array_values() verwendest, hast Du es nicht probiert oder funktioniert das nicht?(nur Interesse halber!)

        Grüße
        Andreas

        1. Hallo Andreas,

          Mich würde interessieren warum Du nicht array_values() verwendest, hast Du es nicht probiert oder funktioniert das nicht?(nur Interesse halber!)

          das müsst in diesem Fall aufs Gleiche rauskommen. Einige Quelle behaupten, dass array_slice() schneller ware und dass array_values() Probleme mit Array-Elementen hätte, die auf false gesetzt wurden, also nicht mit unset() entfernt. Das habe ich aber noch nicht ausprobiert.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.