arrays java - PHP:Ein Element aus einem Array löschen




remove by (25)

Gibt es eine einfache Möglichkeit, ein Element mit PHP aus einem Array zu löschen, sodass foreach ($array) dieses Element nicht mehr enthält?

Ich dachte, dass es auf null wäre, würde es tun, aber anscheinend funktioniert es nicht.


Answers

Wenn Sie ein Element aus einem Array in PHP löschen, ist die Funktion unset eine gute Funktion. Hier ist ein Beispiel für seine Verwendung:

$anArray = array("X", "Y", "Z");

unset($anArray[0]);

//'dumps' the content of $anArray to the page:
var_dump($anArray);  

Die Ausgabe der var_dump-Funktion lautet:

array(2) { [1]=> string(1) "Y" [2]=> string(1) "Z" }

Wenn Sie mehrere Werte in einem Array löschen müssen und die Einträge in diesem Array Objekte oder strukturierte Daten sind, ist [array_filter][1] die beste [array_filter][1] . Die Einträge, die von der Rückruffunktion einen Wert zurückgeben, werden beibehalten.

$array = [
    ['x'=>1,'y'=>2,'z'=>3], 
    ['x'=>2,'y'=>4,'z'=>6], 
    ['x'=>3,'y'=>6,'z'=>9]
];

$results = array_filter($array, function($value) {
    return $value['x'] > 2; 
}); //=> [['x'=>3,'y'=>6,z=>'9']]

Wenn Sie über ein numerisch indiziertes Array verfügen, in dem alle Werte eindeutig sind (oder nicht eindeutig sind, Sie jedoch alle Instanzen eines bestimmten Werts entfernen möchten), können Sie einfach array_diff () verwenden, um ein übereinstimmendes Element wie folgt zu entfernen:

$my_array = array_diff($my_array, array('Value_to_remove'));

Zum Beispiel:

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

Dies zeigt Folgendes an:

4
3

In diesem Beispiel wird das Element mit dem Wert 'Charles' entfernt. Dies kann durch die Aufrufe von sizeof () verifiziert werden, die eine Größe von 4 für das ursprüngliche Array und 3 nach dem Entfernen melden.


Es gibt verschiedene Möglichkeiten, ein Array-Element zu löschen, wobei einige für bestimmte Aufgaben nützlicher sind als andere.

Löschen Sie ein Arrayelement

Wenn Sie nur ein Array-Element löschen möchten, können Sie array_splice() oder alternative array_splice() .

Wenn Sie den Wert haben und den Schlüssel zum Löschen des Elements nicht kennen, können Sie array_search() , um den Schlüssel array_search() .

unset() Methode

Beachten Sie, dass sich die Array-Schlüssel bei Verwendung von unset() nicht ändern bzw. neu indexieren. Wenn Sie die Schlüssel neu indizieren möchten, können Sie array_values() nach array_values() verwenden. array_values() werden alle Schlüssel in numerische Aufzählungsschlüssel umgewandelt, die bei 0 beginnen.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    unset($array[1]);
               //↑ Key which you want to delete

?>

Ausgabe

Array (
    [0] => a
    [2] => c
)

array_splice() -Methode

Wenn Sie array_splice() die Schlüssel automatisch neu indiziert. Die assoziativen Schlüssel ändern sich jedoch nicht im Gegensatz zu array_values() wodurch alle Schlüssel in numerische Schlüssel umgewandelt werden.

Auch array_splice() benötigt den Offset, nicht den Schlüssel! als zweiter Parameter.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    array_splice($array, 1, 1);
                       //↑ Offset which you want to delete

?>

Ausgabe

Array (
    [0] => a
    [1] => c
)

array_splice() dem Array als Referenz. Dies bedeutet, dass Sie die Rückgabewerte dieser Funktionen nicht wieder dem Array zuweisen möchten.

Löschen Sie mehrere Array-Elemente

Wenn Sie mehrere Array-Elemente löschen möchten und nicht mehrmals array_diff() oder array_diff_key() aufrufen möchten, können Sie die Funktionen array_diff() oder array_diff_key() je nachdem, ob Sie die Werte oder die Schlüssel der Elemente kennen Sie möchten löschen.

array_diff() -Methode

Wenn Sie die Werte der array_diff() kennen, die Sie löschen möchten, können Sie array_diff() . Wie zuvor mit unset() werden die Schlüssel des Arrays nicht geändert / neu indiziert.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff($array, ["a", "c"]);
                              //└────────┘→ Array values which you want to delete

?>

Ausgabe

Array (
    [1] => b
)

Methode array_diff_key()

Wenn Sie die Schlüssel der Elemente kennen, die Sie löschen möchten, verwenden Sie array_diff_key() . Hier müssen Sie sicherstellen, dass Sie die Schlüssel als Schlüssel im zweiten Parameter übergeben und nicht als Werte. Andernfalls müssen Sie das Array mit array_flip() . Und auch hier ändern sich die Schlüssel nicht.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                   //↑           ↑ Array keys which you want to delete
?>

Ausgabe

Array (
    [1] => b
)

Wenn Sie array_splice() unset() oder array_splice() , um mehrere Elemente mit demselben Wert zu löschen, können Sie array_keys() , um alle Schlüssel für einen bestimmten Wert array_keys() und anschließend alle Elemente zu löschen.


<?php
$array = array("your array");
$array = array_diff($array, ["element you want to delete"]);
?>

Erstellen Sie Ihr Array in der Variablen $ array und wenn Sie "Element, das Sie löschen möchten" eingefügt haben, setzen Sie etwas wie "a". Und wenn Sie mehrere löschen wollen: "a", "b".


Um eine Suche zu vermeiden, kann man mit array_diff :

$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11

In diesem Fall muss der Schlüssel nicht gesucht / verwendet werden.


unset () mehrere, fragmentierte Elemente aus einem Array

Während unset () bereits mehrfach erwähnt wurde, muss noch erwähnt werden, dass unset () mehrere Variablen akzeptiert, wodurch das einfache Löschen mehrerer nicht zusammenhängender Elemente aus einem Array in einem Vorgang möglich ist:

// Delete multiple, noncontiguous elements from an array
$array = [ 'foo', 'bar', 'baz', 'quz' ];
unset( $array[2], $array[3] );
print_r($array);
// Output: [ 'foo', 'bar' ]

unset () dynamisch

unset () akzeptiert kein Array von Schlüsseln zum Entfernen, daher schlägt der folgende Code fehl (es hätte jedoch die dynamische Verwendung von unset () etwas erleichtert).

$array = range(0,5);
$remove = [1,2];
$array = unset( $remove ); // FAILS: "unexpected 'unset'"
print_r($array);

Stattdessen kann unset () dynamisch in einer foreach-Schleife verwendet werden:

$array = range(0,5);
$remove = [1,2];
foreach ($remove as $k=>$v) {
    unset($array[$v]);
}
print_r($array);
// Output: [ 0, 3, 4, 5 ]

Entfernen Sie die Array-Schlüssel, indem Sie das Array kopieren

Es gibt auch eine andere Praxis, die noch erwähnt werden muss. Manchmal ist es am einfachsten, bestimmte Array-Schlüssel loszuwerden, indem Sie einfach $ array1 in $ array2 kopieren.

$array1 = range(1,10);
foreach ($array1 as $v) {
    // Remove all even integers from the array
    if( $v % 2 ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 1, 3, 5, 7, 9 ];

Die gleiche Vorgehensweise gilt selbstverständlich für Textzeichenfolgen:

$array1 = [ 'foo', '_bar', 'baz' ];
foreach ($array1 as $v) {
    // Remove all strings beginning with underscore
    if( strpos($v,'_')===false ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 'foo', 'baz' ]

Wenn Sie mehrere Elemente aus einem assoziativen Array entfernen müssen, können Sie array_diff_key() (hier verwendet mit array_flip() ) verwenden:

$my_array = array(
  "key1" => "value 1",
  "key2" => "value 2",
  "key3" => "value 3",
  "key4" => "value 4",
  "key5" => "value 5",
);

$to_remove = array("key2", "key4");

$result = array_diff_key($my_array, array_flip($to_remove));

print_r($result);

Ausgabe:

Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 ) 

// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}

Assoziative Arrays

Verwenden Sie für assoziative Arrays unset() :

$arr = array('a' => 1, 'b' => 2, 'c' => 3);
unset($arr['b']);

// RESULT : array('a' => 1, 'c' => 3)

Numerische Arrays

Verwenden array_splice() für numerische Arrays array_splice() :

$arr = array(1, 2, 3);
array_splice($arr, 1, 1);

// RESULT : array(0 => 1, 1 => 3)

Hinweis

Die Verwendung von unset() für numerische Arrays führt nicht zu einem Fehler, aber die Indizes werden durcheinander gebracht:

$arr = array(1, 2, 3);
unset($arr[1]);

// RESULT : array(0 => 1, 2 => 3)

  // our initial array  
   $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");  
  print_r($arr);

  // remove the elements who's values are yellow or red  
   $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);  

Dies ist die Ausgabe aus dem obigen Code:

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

Array_values ​​() indiziert nun ein numerisches Array neu, entfernt jedoch alle Schlüsselzeichenfolgen aus dem Array und ersetzt sie durch Zahlen. Wenn Sie die Schlüsselnamen (Zeichenfolgen) beibehalten oder das Array neu indizieren müssen, wenn alle Schlüssel numerisch sind, verwenden Sie array_merge ():

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

Ausgänge

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)

<?php
    $stack = array("fruit1", "fruit2", "fruit3", "fruit4");
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

Ausgabe:

Array
(
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
)

fruit1

nicht gesetzt, ändern Sie den Index nicht, aber array_splice tut dies

$arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    array_splice($arrayName, 1,2);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )



    $arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    unset($arrayName[1]);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )

Entfernen Sie ein Arrayelement basierend auf dem Schlüssel:

Verwenden Sie die unset Funktion wie folgt:

$a = array(
    'salam',
    '10',
    1
);

unset( $a[1] );

print_r( $a );

/*

Output:

Array
(
    [0] => salam
    [2] => 1
)

*/

Entfernen Sie ein Arrayelement basierend auf Wert:

Verwenden array_search Funktion array_search , um den Elementschlüssel array_search , und entfernen Sie wie oben beschrieben das Array-Element:

$a = array(
    'salam',
    '10',
    1
);

$key = array_search( 10, $a );

if( $key !== false ) {
    unset( $a[ $key ] );
}

print_r( $a );

/*

Output:

Array
(
    [0] => salam
    [2] => 1
)

*/

<?php 
//If you want to remove a particular array element use this method
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");

print_r($my_array);
if(array_key_exists("key1",$my_array)){  
unset($my_array['key1']);
print_r($my_array);
}else{
echo "Key does not exist";
}
?>

<?php 
//To remove first array element
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array=array_slice($my_array,1); 
print_r($new_array);
?>


<?php 
echo "<br/> ";
//To remove first array element to length
//starts from first and remove two element 
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array=array_slice($my_array,1,2); 
print_r($new_array);
?>

Ausgabe

 Array ( [key1] => value 1 [key2] => value 2 [key3] => 
 value 3 ) Array (    [key2] => value 2 [key3] => value 3 ) 
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 ) 
 Array ( [key2] => value 2 [key3] => value 3 )
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 ) 
 Array ( [key2] => value 2 [key3] => value 3 ) 

unset() zerstört die angegebenen Variablen.

Das Verhalten von unset() innerhalb einer Funktion hängt von dem Typ der Variablen ab, die Sie zu zerstören versuchen.

Wenn eine globalisierte Variable innerhalb einer Funktion unset() ist, wird nur die lokale Variable zerstört. Die Variable in der aufrufenden Umgebung behält den gleichen Wert wie vor dem Aufruf von unset() .

<?php
function destroy_foo() 
{
    global $foo;
    unset($foo);
}

$foo = 'bar';
destroy_foo();
echo $foo;
?>

Die Antwort des obigen Codes wird bar sein

unset() eine globale Variable innerhalb einer Funktion

<?php
function foo() 
{
    unset($GLOBALS['bar']);
}

$bar = "something";
foo();
?>

Auch für ein benanntes Element:

unset($array["elementName"]);

$arr = array('orange', 'banana', 'apple', 'raspberry');
$result= array_pop($arr);
print_r($result);

$x = array(1, 2, 3, 4, 5);
var_dump($x);
unset($x[3]); // here is key to be delete
echo '<br>';
array_values($x);
var_dump($x);


Zerstören Sie ein einzelnes Element eines Arrays

unset()

$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);

Die Ausgabe wird sein:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "E"
}

Wenn Sie das Array erneut indizieren müssen:

$array1 = array_values($array1);
var_dump($array1);

Dann wird die Ausgabe sein:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "D"
  [3]=>
  string(1) "E"
}

Popup des Elements vom Ende des Arrays - gibt den Wert des entfernten Elements zurück

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array

Die Ausgabe wird sein

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)
Last Fruit: raspberry

Entfernen Sie das erste Element (rot) aus einem Array , - geben Sie den Wert des entfernten Elements zurück

mixed array_shift ( array &$array )

$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);

Die Ausgabe wird sein:

Array
(
    [b] => green
    [c] => blue
)
First Color: red

Lösungen:

  1. Um ein Element zu löschen, verwenden Sie unset() :
unset($array[3]);
unset($array['foo']);
  1. Um mehrere nicht zusammenhängende Elemente zu löschen, verwenden Sie auch unset() :
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
  1. Um mehrere zusammenhängende Elemente zu löschen, verwenden Sie array_splice() :
array_splice($array, $offset, $length);

Weitere Erklärung:

Mit diesen Funktionen werden alle Verweise auf diese Elemente aus PHP entfernt. Wenn Sie einen Schlüssel im Array behalten möchten, der jedoch einen leeren Wert enthält, weisen Sie dem Element die leere Zeichenfolge zu:

$array[3] = $array['foo'] = '';

Neben der Syntax gibt es einen logischen Unterschied zwischen der Verwendung von unset() und der Zuordnung von '' zum Element. Der erste besagt, dass This doesn't exist anymore, während der zweite besagt, dass The This still exists, but its value is the empty string.

Wenn Sie mit Zahlen zu tun haben, kann die Zuweisung von 0 die bessere Alternative sein. Wenn also ein Unternehmen die Produktion des Kettenrads XL1000 stoppte, würde es seinen Bestand mit folgenden Informationen aktualisieren:

unset($products['XL1000']);

Wenn der XL1000-Zahnkranz jedoch vorübergehend ausgeht, aber später in der Woche eine neue Lieferung aus dem Werk erhalten wollte, ist dies besser:

$products['XL1000'] = 0;

Wenn Sie ein Element unset() , passt PHP das Array so an, dass die Schleife immer noch korrekt funktioniert. Das Array wird nicht komprimiert, um die fehlenden Löcher zu füllen. Das meinen wir, wenn wir sagen, dass alle Arrays assoziativ sind, selbst wenn sie numerisch erscheinen. Hier ist ein Beispiel:

// create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1];  // prints 'bee'
print $animals[2];  // prints 'cat'
count($animals);    // returns 6

// unset( )
unset($animals[1]); // removes element $animals[1] = 'bee'
print $animals[1];  // prints '' and throws an E_NOTICE error
print $animals[2];  // still prints 'cat'
count($animals);    // returns 5, even though $array[5] is 'fox'

// add new element
$animals[ ] = 'gnu'; // add new element (not Unix)
print $animals[1];  // prints '', still empty
print $animals[6];  // prints 'gnu', this is where 'gnu' ended up
count($animals);    // returns 6 

// assign ''
$animals[2] = '';   // zero out value
print $animals[2];  // prints ''
count($animals);    // returns 6, count does not decrease

Verwenden Sie array_values() , um das Array in ein dicht gefülltes numerisches Array zu array_values() :

$animals = array_values($animals);

Alternativ array_splice() Arrays automatisch neu, um Löcher zu vermeiden:

// create a "numeric" array
    $animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
    array_splice($animals, 2, 2);
    print_r($animals);
    Array
    (
        [0] => ant
        [1] => bee
        [2] => elk
        [3] => fox
    )

Dies ist nützlich, wenn Sie das Array als Warteschlange verwenden und Elemente aus der Warteschlange entfernen möchten, während Sie den wahlfreien Zugriff zulassen. Um das erste oder letzte Element sicher aus einem Array zu entfernen, verwenden Sie array_shift () bzw. array_pop () .


unset($array[$index]);

Angenommen, Sie haben ein solches Array:

Array
(
    [user_id] => 193
    [storage] => 5
)

So löschen Sie storage :

unset($attributes['storage']);
$attributes = array_filter($attributes);

Und du bekommst:

Array
(
    [user_id] => 193
)

Sie können einfach unset() , um ein Array zu löschen.

Denken Sie daran, dass das Array nach der foreach Funktion foreach werden muss.


Ich weiß nicht, wie Sie erwarten, dass sich array.remove(int) verhält. Es gibt drei Möglichkeiten, an die ich denken kann, die Ihnen vielleicht fehlen.

So entfernen Sie ein Element eines Arrays an einem Index i :

array.splice(i, 1);

Wenn Sie jedes Element mit der Wertnummer aus dem Array entfernen möchten:

for(var i = array.length - 1; i >= 0; i--) {
    if(array[i] === number) {
       array.splice(i, 1);
    }
}

Wenn Sie nur das Element am Index i möchten, ist es nicht mehr vorhanden, die Indizes der anderen Elemente sollen jedoch nicht geändert werden:

delete array[i];




php arrays