1169 Stimmen

PHP Array löschen nach Wert (nicht Schlüssel)

Ich habe ein PHP-Array wie folgt:

$messages = [312, 401, 1599, 3, ...];

Ich möchte das Element löschen, das den Wert $del_val (zum Beispiel, $del_val=401 ), aber ich kenne den Schlüssel nicht. Das könnte helfen: jeder Wert kann nur einmal vorhanden sein .

Ich bin auf der Suche nach der einfachsten Funktion, um diese Aufgabe zu erfüllen, bitte.

1 Stimmen

@Adam Strudwick Aber wenn Sie viele Löschungen in diesem Array haben, wäre es dann besser, es einmal zu iterieren und den Schlüssel mit dem Wert gleichzusetzen?

1 Stimmen

0 Stimmen

4voto

Eric Punkte 90800

Ein Einzeiler unter Verwendung der or Betreiber:

($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);

4voto

d.raev Punkte 8510

Ich weiß, dass dies überhaupt nicht effizient ist, aber es ist einfach, intuitiv und leicht zu lesen.
Wenn also jemand nach einer nicht so ausgefallenen Lösung sucht, die erweitert werden kann, um mit mehr Werten oder spezifischeren Bedingungen zu arbeiten hier ist ein einfacher Code:

$result = array();
$del_value = 401;
//$del_values = array(... all the values you don`t wont);

foreach($arr as $key =>$value){
    if ($value !== $del_value){
        $result[$key] = $value;
    }

    //if(!in_array($value, $del_values)){
    //    $result[$key] = $value;
    //}

    //if($this->validete($value)){
    //      $result[$key] = $value;
    //}
}

return $result

1voto

Mohd Abdul Mujib Punkte 11758

Gemäß Ihrer Anforderung " jeder Wert kann nur einmal vorhanden sein ", wenn Sie nur daran interessiert sind, eindeutige Werte in Ihrem Array zu behalten, dann ist die array_unique() könnte das sein, wonach Sie suchen.

Eingabe:

$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);

結果です:

array(2) {
  [0] => int(4)
  [2] => string(1) "3"
}

0voto

algo Punkte 64

Am einfachsten wäre es wohl, eine Funktion mit einer foreach-Schleife zu verwenden:

//This functions deletes the elements of an array $original that are equivalent to the value $del_val
//The function works by reference, which means that the actual array used as parameter will be modified.

function delete_value(&$original, $del_val)
{
    //make a copy of the original, to avoid problems of modifying an array that is being currently iterated through
    $copy = $original;
    foreach ($original as $key => $value)
    {
        //for each value evaluate if it is equivalent to the one to be deleted, and if it is capture its key name.
        if($del_val === $value) $del_key[] = $key;
    };
    //If there was a value found, delete all its instances
    if($del_key !== null)
    {
        foreach ($del_key as $dk_i)
        {
            unset($original[$dk_i]);
        };
        //optional reordering of the keys. WARNING: only use it with arrays with numeric indexes!
        /*
        $copy = $original;
        $original = array();
        foreach ($copy as $value) {
            $original[] = $value;
        };
        */
        //the value was found and deleted
        return true;
    };
    //The value was not found, nothing was deleted
    return false;
};

$original = array(0,1,2,3,4,5,6,7,4);
$del_val = 4;
var_dump($original);
delete_value($original, $del_val);
var_dump($original);

Die Ausgabe wird sein:

array(9) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [4]=>
  int(4)
  [5]=>
  int(5)
  [6]=>
  int(6)
  [7]=>
  int(7)
  [8]=>
  int(4)
}
array(7) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [5]=>
  int(5)
  [6]=>
  int(6)
  [7]=>
  int(7)
}

0voto

fico7489 Punkte 7241

Hier gibt es eine einfache, aber verständliche Lösung:

$messagesFiltered = [];
foreach ($messages as $message) {
    if (401 != $message) {
        $messagesFiltered[] = $message;
    }
}
$messages = $messagesFiltered;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X