Fehler in funktion - in_array()

Bartsi

Grünschnabel
Moin moin,

ich habe eine Funktion gefunden die es mir ermöglicht Multiarrays zu durchsuchen. Jedoch wird mein Log gespammt mit einer Fehlermeldung.

PHP:
<?php
function array_multi_search($mSearch, $aArray, $sKey = "")
{
    $aResult = array();
    foreach( (array) $aArray as $aValues)
    {
        if($sKey === "" && in_array($mSearch, $aValues)) $aResult[] = $aValues;
        else
            if(isset($aValues[$sKey]) && $aValues[$sKey] == $mSearch) $aResult[] = $aValues;
    }
    return $aResult;
}
?>

Fehler: PHP Warning: in_array() expects parameter 2 to be array, integer given in /var/www/html/function.php on line 7

Kann mir hier einer weiterhelfen?

Vielen lieben dank
 
Er spamt dir das Log wegen dieser Zeile voll:

PHP:
if($sKey === "" && in_array($mSearch, $aValues)) $aResult[] = $aValues;

Irgendwann kommt deine Funktion an ein Eintrag der kein Array ist und setzt diese in die Funktion in_array als Array ein, dadurch kommt die Fehlermeldung.

Dabei lässt diese Funktion vollkommen außer acht, dass das Array auch tiefer als 2 Ebenen sein kann.
Soll deine Funktion alle gefundenen Einträge auflisten oder reicht es, das die Funktion angibt, ob das Value gefunden wird.
 
Huhu,

ich nutze die Funktion um zu prüfen ob ein Value vorhanden ist. Mehr nicht :)

Gruß und danke
 
Wenn es nur um das Vorhanden sein geht, dann dürfte das auch Vollkommen reichen:

PHP:
function in_array_multi( string $search, array $ARRAY ) {
    $return = FALSE;
    foreach( $ARRAY as $ENTRY ) {
        if( is_array( $ENTRY ) ) {
            $return = in_array_multi( $search, $ENTRY ) === TRUE ? TRUE : $return;
        } elseif( $ENTRY == $search ) $return = TRUE;
    }
   
    return $return;
}

Die Funktion gibt ein einfaches Boolean zurück. Für dieses Anwendungsbeispiel reicht das.
 
Der Vollständigkeit halber hier noch eine Funktion, die die Pfade des gesuchten Values zurück gibt.

PHP:
function find_Value_Path( string $search, array $ARRAY ) {
    $RETURN = array( );
  
    foreach( $ARRAY as $key => $ENTRY ) {
        if( is_array( $ENTRY ) ) {
            $BUFFER = find_Value_Path( $search, $ENTRY );
          
            if( count( $BUFFER ) > 0 )
                $RETURN[$key] = $BUFFER;
        } elseif( $ENTRY == $search ) $RETURN[$key] = $ENTRY;
    }
  
    return $RETURN;
}
 

Neue Beiträge

Zurück