[Funktion] return wird ingoriert

StefanR

Erfahrenes Mitglied
Hallo,

hab da nen kleines Problem, mit einer Funktion und zwar, verwende ich diese Funktion hier um durch ein Array zu laufen (rekursiv):

PHP:
function arraySearchMulti($multiArray, $string) {
   	foreach ($multiArray as $key => $val) {
   		if(is_array($val)) {
   			arraySearchMulti($val, $string);
   		}
   		else {
   			if($val == $string) {
   				$result = true;
   			}
   			else {
   				$result = false;
   			}
   		}
   	}
   	return $result;
}
$newdoc['sections'][0]['files'][0]['topic'] = 'test';
$search = arraySearchMulti($newdoc, 'test');
if($search === true) {
	echo toll;
}

Nur keine Augabe, von toll! Hab $result mir schonmal augeben lassen, kommt auch ne 1, nur halt im Ausdruck klappt das nicht, keinen Plan warum....:rolleyes:

Hat jemand nen Tipp woran das liegen könnte?
 
Hallo,
ist toll eigentlich eine Konstante? Wenn nicht musst du es nämlich so schreiben:
PHP:
echo 'toll';

mfg
forsterm
 
StefanR hat gesagt.:
PHP:
function arraySearchMulti($multiArray, $string) {
   	foreach ($multiArray as $key => $val) {
   		if(is_array($val)) {
   			arraySearchMulti($val, $string);
   		}
   		else {
   			if($val == $string) {
   				$result = true;
   			}
   			else {
   				$result = false;
   			}
   		}
   	}
   	return $result;
}
$newdoc['sections'][0]['files'][0]['topic'] = 'test';
$search = arraySearchMulti($newdoc, 'test');
if($search === true) {
	echo toll;
}

Nur keine Augabe, von toll!

Was soll denn das "toll" sein?
wenn es ein String sein soll, dann musst du es auch mit "" ausgeben. Also
echo "toll";

Hmm denke aber nicht, dass du das nicht wüßtest, dafür sieht mir dein script etwas zu fortgeschritten für aus...


lg.
Garlof
 
Zwar unsauber der Stil, aber das geht trotzdem. Ist nur eine Konstante, findet PHP die nicht, interpretiert er dies als String. Hab ich mal irgendwo gelesen. :) Deshalb funktioniert ja auch:
PHP:
$arr[tollesarray] = 12;
Wobei man sowas unterlassen sollte ;-] Habs aber nochmal als String deklariert und selbes Ergebnis! :)
 
Hallo Stefan,

zwei Probleme gibt es bei deiner Funktion:
  1. Du verwirfst das Ergebnis des rekursiven Aufrufs
  2. Suchst du nach "foo" im Array ["foo", "bar"], so gibt deine Funktion false zurück, weil zuletzt beim Vergleich mit "bar" $result auf false gesetzt wird.

Grüße,
Matthias
 
Das mit den Konstanten ist schon richtig. Aber es wird eine Notice oder Warning ausgegeben wenn das Error-Logging entsprechend eingestellt ist. Ausserdem koennte es ja evtl. zu einer Kollision mit einer Konstanten kommen. Und so schreibfaul kann man doch wirklich nicht sein und die "" oder '' auslassen weil das ja so viel Arbeit ist.
 
Mein Vorschlag:
PHP:
function arraySearchMulti( $needle, $haystack, $strict=false )
{
	if( !is_array($haystack) ) {
		return false;
	}

	foreach( $haystack as $val ) {
		if( is_array($val) && arraySearchMulti($needle, $val, $strict) ) {
			return true;
		} elseif( (!$strict && $val == $needle) || ($strict && $val === $needle) ) {
			return true; 
		}
	}
	return false; 
}
Die Existenz eines Arrays in einem Array kann damit natürlich nicht mehr geprüft werden.
 
Dennis Wronka hat gesagt.:
Das mit den Konstanten ist schon richtig. Aber es wird eine Notice oder Warning ausgegeben wenn das Error-Logging entsprechend eingestellt ist. Ausserdem koennte es ja evtl. zu einer Kollision mit einer Konstanten kommen. Und so schreibfaul kann man doch wirklich nicht sein und die "" oder '' auslassen weil das ja so viel Arbeit ist.

Mach ich ja sonst auch nicht, als die Sticks weglassen, war nur weil ich wirklich bei Tests nen bissel schreibfaul bin. :)

@Gumbo Danke das klappt so ähnlich hät ichs jetzt auch gemacht nur mit array_search() :) Aber arbeitet ja ähnlich die Funktion. :)
 
Die array_search()-Funktion liefert aber im Erfolgsfall den Schlüssel des Elements zurück. Doch dagegen habe ich auch ein Kraut gezüchtet:
PHP:
function array_searchRecursive( $needle, $haystack, $strict=false, $path=array() )
{
	if( !is_array($haystack) ) {
		return false;
	}

	foreach( $haystack as $key => $val ) {
		if( is_array($val) && $subPath = array_searchRecursive($needle, $val, $strict, $path) ) {
			$path = array_merge($path, array($key), $subPath);
			return $path;
		} elseif( (!$strict && $needle==$val) || ($strict && $needle===$val) ) {
			$path[] = $key;
			return $path;
		}
	}
	return false; 
}
 
Hallo,

StefanR hat gesagt.:
Mach ich ja sonst auch nicht, als die Sticks weglassen, war nur weil ich wirklich bei Tests nen bissel schreibfaul bin. :)
„Sticks“? Die Zeichen heißen immer noch (einfache) Anführungszeichen. Wenn's unbedingt Englisch sein muss, dann auch „single quotes“.

Grüße,
Matthias
 
Zurück