PHP array_search Fehler

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Hallo,

ich habe ein Problem mit der Funktion array_search.

Bei mir taucht immer der Fehler auf:

Warning: array_search() expects parameter 2 to be array, null given in...
Aber ich übergebe eigentlich ein Array.

So sieht der Code an der Stelle aus:

PHP:
        $myarray = $this->possibleMoves();
        $myarr = array('41','51');
        print_r($myarray);
        print_r($myarr);
        if(array_search($field, $myarray) !== FALSE) {
            return TRUE;
        }
Und die Ausgabe:

Array ( [0] => 41 [1] => 51 ) Array ( [0] => 41 [1] => 51 )
Warning: array_search() expects parameter 2 to be array, null given
Ich habe jetzt extra mit print_r das Array ausgegeben um zu sehen, dass es nicht leer ist. Aber es funktioniert einfach nicht. Wenn ich stattdessen $myarr einsetzte, klappt es.


Die Funktion $this->possibleMoves(); liefert ein Array zurück das so aufgebaut wird:

PHP:
$saveMove = array();
$pos = 5;
$saveMove[] = $pos;

return $saveMove;
Können arrays vll verschiedene Strukturen haben? Ich weiß echt nicht weiter. Bin euch dankbar für Hilfe,

Gruß Patrick
 
Mir fällt nichts auf, eigentlich müsste es funktionieren.
Das einzige, das bei den Arrays unterschiedlich ist, sind die Typen.
Nutz mal var_dump($arr); statt print_r($arr);

Code:
array(2) {
[0]=>  int(41)
[1]=>  int(51)
}

array(2) {
[0]=>  string(2) "41"
[1]=>  string(2) "51"
}

Aber das ist kein Grund für die Fehlermeldung, da die Typen hier keine Rolle spielen.
Laut der Fehlermeldung ist $myarray NULL, aber es ist ja ein Array...
 
Oh hm... hab jetzt var_dump benutzt und nun zeigt er das an:

NULL
array(1) { [0]=> string(2) "21" }

und der code:

PHP:
var_dump($myarray);
        print("<br>");
        var_dump($myarr);

aber wieso bekomm ich bei print_r dann eine ausgabe?

hat das was mit referenz oder sowas zu tun?
 
Ich kann den Fehler nicht reproduzieren:

PHP:
<?php
class testit{
	function makearray(){
		$saveMove = array();
		$pos = 5;
		$saveMove[] = $pos;
		return $saveMove;
	}
	function __construct(){
		$myarray = $this->makearray();
		$myarr = array(5);
		var_dump($myarray);
		var_dump($myarr);
	}
}
$test = new testit();
?>

Ausgabe:

Code:
array(1) {
  [0]=>
  int(5)
}
array(1) {
  [0]=>
  int(5)
}
 
Hm.. ja, habs jetzt so gemacht wie du und dann funktionierts auch.

Ich habe dazwischen noch eine Hilfsfunktion gehabt:

PHP:
public function possibleMoves() {
        return $this->board->moves($this->possibleMove, $this->moveFields, $this->position);    
    }
und die Funktion moves entspricht deiner Funktion makearray().

Wie muss ich dann die Funktion possibleMoves abändern?#


EDIT:

Ah, würde doch funktionieren, aber ich hab was anders vergessen zu posten.


Und zwar wir die Methode possibleMoves() überschrieben und zwar so:

PHP:
    public function possibleMoves() {
        parent::possibleMoves();        
    }

Also eigentlich macht die Methode ja nichts, außer die Methode zu überschreiben, aber dann die überschriebene Methode wieder auszuführen.
Da muss der Fehler stecken.
 
Zuletzt bearbeitet:
Wie muss ich dann die Funktion possibleMoves abändern?

Die Funktion possibleMoves gibt ja nur das zurück, was sie von der moves-Funktion zurückbekommt. Da wird ja nichts geändert.

EDIT wg. deinem EDIT:
Da fehlt ein return in der überschriebenen Funktion, so wird nämlich nichts zurückgegeben.

Mal nebenbei, warum überschreibst du eine Funktion, wenn du nichts ändern willst? Oder kommt das noch ;)?

EDIT2:
Sebmaster war schneller :yes:
 
Zuletzt bearbeitet:
Ah, suuuuuuuuuuuuuper :D

Ja, in die überschreibende Funktion kommt noch was, bzw. da war schon was, aber ich habs rausgemacht, damit da der Fehler nicht hätte liegen können.

Ich hab hier das Buch "PHP Desgin Patterns" und da steht das mit dem überschreiben und parent drinne und zwar so:

PHP:
public function stopEngine() {
if(this->roofOpen) {
 $this->closeRoof();
}
parent::stopEngine()
}
Also kein return. Demzufolge hab ich halt auch kein return gemacht :roll:


Naja, vielen Dank dass ihr euch Zeit genommen habt =)
 
  • Like
Reaktionen: Fee