PHP PHP Warning: Illegal offset type in isset or empty

Schumiel schrieb:
Mit &$tests ist der Fehler weg, aber der Inhalt davon auch.
Ich habe das nochmal getestet: Es steht immer der an $tests zuletzt zugewiesene Wert drin, d.h. deine letzte Zuweisung wäre null oder array(). Du musst nach der Zuweisung noch unset($tests); einfügen, damit das nächste Element eine neue Referenz bekommt.
Kannst du aber bestätigen, dass im letzten Tag nichts drin steht, oder ist da noch mehr Code der was mit $tests macht?

Schumiel schrieb:
Hier mal der Auszug aus $tests ...
Ist das auch eine seltsam gekürzte Fassung? Da sieht es nämlich so aus, als wäre "test" mehrfach als Key im Array eingetragen. Was im Array als Wert drin steht, ist vollkommen unerheblich.
 
  • Gefällt mir
Reaktionen: Sgt_H4rtman
Sgt_H4rtman schrieb:
Gerade in der interaktiven Shell nochmal probiert:
PHP:
error_reporting(E_ALL);
$foo = ['bar' => ['foo' => true]];

// this is ok > bool(true)
var_dump(isset($foo['bar']['foo']));
// this is ok too > bool(false)
var_dump(isset($foo['baz']['foo']));
// this is not ok > Notice: Undefined index: baz in php shell code on line
var_dump($foo['baz']['foo']);

Meine Aussage stimmt also. Im übrigen ist dies auch eine Inspection in PhpStorm mit PHP Inspections (EA Extended) Plugin. Ich habe mir das also nicht ausgedacht.

BTT:
@Schumiel hast du die Möglichkeit, das mit einem Debugger (XDebug) in PHPStorm oder VsCode zu testen? Bzw.: Wenn du weißt dass der Fehler dort liegt, dann lass dir doch mal per var_dump in jedem Durchlauf die Typen für $key und $tests ausgeben. Der Fehler ist eigentlich ziemlich eindeutig. Unter Umständen steckt in $key auf einmal ein Float, weil du noch damit etwas berechnest. Ich vermute mal, du hast nicht den gesamten Code der Schleife gepostet.

Das ist so ziemlich was ich gesagt hab, eben weil dein zweites Beispiel nen Fehler wirft ;)
 
mambokurt schrieb:
Das ist so ziemlich was ich gesagt hab, eben weil dein zweites Beispiel nen Fehler wirft ;)

Himmel der dritte Aufruf wirft die Notice, der ohne isset. Für isset ist der Aufruf in Ordnung und läuft ohne Fehler durch. Probiere es doch bitte selbst aus, wenn du mir nicht glauben willst.

BTT: Also Schumiel, ich denke ohne Debugger wirst du hier nicht weiter kommen. Von dem was du postest, kann der Fehler nicht nachvollzogen werden. Wie schon gesagt, was in $tests steht ist eigentlich unerheblich, da der Wert eines Arrays beliebig sein darf. Pack doch mal bitte folgenden Code in deine Zeile 53: var_dump(gettype($key));

Ansonsten einen Debugger verwenden und Breakpoint setzen. Hast du denn den Tipp mit dem error handler schon probiert? Du hast hier wirklich ein paar sehr gute Hinweise bekommen. Poste vor allem auch mal welche PHP Version du verwendest. In PHP 7 mit scalar Type hinting kann man mittels array_map und entsprechend geschriebenem Callback den Fehler auch schnell sichtbar machen.
 
Zuletzt bearbeitet:
Danke für eure Hilfe. Aber ich habe den Fehler noch nicht gefunden. Eure Tipps teste ich alle aus, aber die sind oft ohne Erfolg geprägt.

var_dump(gettype($key)); ist alles integer.

Mich haben aber eure Hinweise auf eine neue Idee gebracht. Ich bin immer noch der Meinung, der Fehler liegt in $tests. Ich habe daher manuell mal folgende Werte eingetragen.

PHP:
$tests= array(
    "uid" => 12,
    "pid" => 12
);

... funktioniert.

PHP:
$tests= array(array(
    "uid" => 12,
    "pid" => 12
));

... funktioniert nicht. Die bekannte Fehlermeldung. Aber genauso wird mir $tests geliefert.

Ich nutze php7.2
 
Ich habe den Fehler gefunden, der gar nicht an dieser Stelle begründet war.
Sondern bei der Übergabe per view hat es dann dort entsprechend geknallt.
Das war eine lange und schwierige Geburt.

Ich danke euch allen für eure Hilfe!!!
 
Zurück
Oben