Array durchsuchen und löschen

Sasser

Erfahrenes Mitglied
Guten Morgen,

ich durchsuche ein Array nach Werten und lösche diesen:

PHP:
foreach ($noerrors as $noerror) {
                if (in_array ( $noerror, $printer ["error"] )) {
                    $i = array_search ( $noerror, $printer ["error"] );
                    unset ( $printer ["error"] [$i] );
                }
            }

Ich habe bestimmte Fehler, z.B. "Systemerror" und möchte alle löschen, wo dieser Wert darin vorkommt. Also auch Werte, welche z.B. "Das ist ein Systemerror" heißen. Bisher werden ja nur die gelöscht, welche auch eindeutig so heißen. Habt ihr eine Idee?
 
Danke, die Funktion habe ich auch im Kopf gehabt,

aber wie lösche ich damit den Teil inkl. Schlüssel des Arrays?

PHP:
$array = array ();
            $array ["0"] = "Der Drucker hat wenig Toner!"
            $array ["1"] = "Fach 1 leer beim Drucker!"
            $array ["2"] = "Fehlermeldung soll übrig bleiben!";

            $noerrors = array ();
            $noerrors ["0"] = "Wenig Toner";
            $noerrors ["1"] = "Fach 1 leer";
            foreach ($noerrors as $noerror) {
               
                $fl_array = preg_grep ( "/^*" . $noerror . "*/", $array );
               
            }
           
            print_r ( $fl_array );
 
Zuletzt bearbeitet:
Ich würde es so lösen:
PHP:
$messages = array(
    'Der Drucker hat wenig Toner!',
    'Fach 1 leer beim Drucker!',
    'Fehlermeldung soll übrig bleiben!'
);

$skip = array(
    'Wenig Toner',
    'Fach 1 leer'
);

$messages = array_filter( $messages, function ( $message ) use ( $skip ) {
    $pattern = sprintf( '/%s/i', implode( '|', $skip ) );
    return ( preg_match( $pattern, $message ) !== 1 );
});
 
Du musst nur aufpassen wenn $skip Zeichen enthält die eine besondere Bedeutung für regexen haben...
 
Alxy, das war mir bewusst, aber ich habe es der Einfachheit halber mal weggelassen. Schöner (und performanter) wäre es natürlich so:
PHP:
$messages = array(
    'Der Drucker hat wenig Toner!',
    'Fach 1 leer beim Drucker!',
    'Fehlermeldung soll übrig bleiben!'
);

$skip = array(
    'Wenig Toner',
    'Fach 1 leer'
);

# alle Werte in $skip einmal maskieren
$skip = array_walk( $skip, function ( &$item ) {
    $item = preg_quote( $item, '/' );
});

# ... und das Muster auch nur einmal zusammen bauen und nicht bei jedem Aufruf erneut
$pattern = sprintf( '/%s/i', implode( '|', $skip ) );

$messages = array_filter( $messages, function ( $message ) use ( $pattern ) {
    return ( preg_match( $pattern, $message ) !== 1 );
});
 

Neue Beiträge

Zurück