Suche…


Elemente aus einem Array entfernen

So entfernen Sie ein Element innerhalb eines Arrays, z. B. das Element mit dem Index 1.

$fruit = array("bananas", "apples", "peaches");
unset($fruit[1]);

Dadurch werden die Äpfel aus der Liste entfernt. unset jedoch, dass die Indizes der übrigen Elemente durch unset nicht geändert werden. $fruit enthält nun also die Indizes 0 und 2 .

Für ein assoziatives Array können Sie es wie folgt entfernen:

$fruit = array('banana', 'one'=>'apple', 'peaches');

print_r($fruit);
/*
    Array
    (
        [0] => banana
        [one] => apple
        [1] => peaches
    )
*/

unset($fruit['one']); 

Jetzt ist $ Obst

print_r($fruit);

/*
Array
(
    [0] => banana
    [1] => peaches
)
*/

Beachten Sie, dass

unset($fruit);

löscht die Variable und entfernt somit das gesamte Array, sodass auf keines seiner Elemente mehr zugegriffen werden kann.

Terminalelemente entfernen

array_shift () - Verschiebt ein Element vom Anfang des Arrays.

Beispiel:

  $fruit = array("bananas", "apples", "peaches");
  array_shift($fruit);
  print_r($fruit);

Ausgabe:

 Array
(
    [0] => apples
    [1] => peaches
)

array_pop () - Platziere das Element am Ende des Arrays.

Beispiel:

  $fruit = array("bananas", "apples", "peaches");
  array_pop($fruit);
  print_r($fruit);

Ausgabe:

 Array
(
    [0] => bananas
    [1] => apples
)

Filtern eines Arrays

Um Werte aus einem Array herauszufiltern und ein neues Array zu erhalten, das alle Werte enthält, die die Filterbedingung erfüllen, können Sie die Funktion array_filter verwenden.

Nicht leere Werte filtern

Der einfachste Fall der Filterung besteht darin, alle "leeren" Werte zu entfernen:

$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$non_empties = array_filter($my_array); // $non_empties will contain [1,2,3,4,5,6,7,8]; 

Filtern nach Rückruf

Diesmal definieren wir unsere eigene Filterregel. Angenommen, wir möchten nur gerade Zahlen erhalten:

$my_array = [1,2,3,4,5,6,7,8];

$even_numbers = array_filter($my_array, function($number) {
    return $number % 2 === 0;   
});

Die Funktion array_filter empfängt das zu filternde Array als erstes Argument und einen Rückruf, der das Filterprädikat als zweites definiert.

5.6

Filtern nach Index

Ein dritter Parameter kann der Funktion array_filter zur Verfügung array_filter werden, der es ermöglicht, zu optimieren, welche Werte an den Rückruf übergeben werden. Dieser Parameter kann entweder auf ARRAY_FILTER_USE_KEY oder ARRAY_FILTER_USE_BOTH , was dazu führt, dass der Rückruf den Schlüssel anstelle des Werts für jedes Element im Array erhält, oder sowohl Wert als auch Schlüssel als Argumente. Wenn Sie sich beispielsweise mit Indizes befassen wollen, ist dies ein Wert von Werten:

$numbers = [16,3,5,8,1,4,6];

$even_indexed_numbers = array_filter($numbers, function($index) {
    return $index % 2 === 0;
}, ARRAY_FILTER_USE_KEY);

Indizes in gefiltertem Array

Beachten Sie, dass array_filter die ursprünglichen Array-Schlüssel array_filter . Ein häufiger Fehler wäre die Verwendung einer for Schleife für das gefilterte Array:

<?php

$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$filtered = array_filter($my_array); 

error_reporting(E_ALL); // show all errors and notices

// innocently looking "for" loop
for ($i = 0; $i < count($filtered); $i++) {
   print $filtered[$i];
}

/*
Output:
1
Notice: Undefined offset: 1
2
Notice: Undefined offset: 3
3
Notice: Undefined offset: 5
4
Notice: Undefined offset: 7
*/

Dies geschieht, weil die Werte auf den Positionen 1 ( 0 ), 3 ( null ), 5 (leere Zeichenfolge '' ) und 7 (leeres Array [] ) zusammen mit den entsprechenden Indexschlüsseln entfernt wurden.

Wenn Sie das Ergebnis eines Filters für ein indiziertes Array array_values , müssen Sie zuerst array_values für das Ergebnis von array_filter , um ein neues Array mit den richtigen Indizes zu erstellen:

$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$filtered = array_filter($my_array); 
$iterable = array_values($filtered);

error_reporting(E_ALL); // show all errors and notices

for ($i = 0; $i < count($iterable); $i++) {
   print $iterable[$i];
}

// No warnings!

Element zum Arrayanfang hinzufügen

Manchmal möchten Sie ein Element am Anfang eines Arrays hinzufügen, ohne eines der aktuellen Elemente ( Reihenfolge ) innerhalb des Arrays zu ändern . Wann immer dies der Fall ist, können Sie array_unshift() .

array_unshift() überträgt übergebene Elemente an die Vorderseite des Arrays. Beachten Sie, dass die Liste der Elemente als Ganzes vorangestellt wird, sodass die vorangegangenen Elemente in derselben Reihenfolge bleiben. Alle numerischen Array-Tasten werden so geändert, dass die Zählung von Null beginnt, während die Literal-Tasten nicht berührt werden.

Aus der PHP-Dokumentation für array_unshift() .

Wenn Sie dies erreichen möchten, müssen Sie Folgendes tun:

$myArray = array(1, 2, 3);

array_unshift($myArray, 4);

Dies fügt jetzt 4 als erstes Element in Ihrem Array hinzu. Sie können dies überprüfen durch:

print_r($myArray);

Dies gibt ein Array in der folgenden Reihenfolge zurück: 4, 1, 2, 3 .

Da array_unshift das Array zwingt, die Schlüssel-Wert-Paare zurückzusetzen, da die folgenden Einträge die Schlüssel n+1 haben, ist es intelligenter, ein neues Array zu erstellen und das vorhandene Array an das neu erstellte Array anzuhängen.

Beispiel:

$myArray = array('apples', 'bananas', 'pears');
$myElement = array('oranges');
$joinedArray = $myElement;

foreach ($myArray as $i) {
  $joinedArray[] = $i;
}

Ausgabe ($ joinArray):

Array ( [0] => oranges [1] => apples [2] => bananas [3] => pears ) 

Eaxmple / Demo

Whitelist nur einige Array-Schlüssel

Wenn Sie nur bestimmte Schlüssel in Ihren Arrays zulassen möchten, insbesondere wenn das Array von Anforderungsparametern stammt, können Sie array_intersect_key zusammen mit array_flip .

$parameters = ['foo' => 'bar', 'bar' => 'baz', 'boo' => 'bam'];
$allowedKeys = ['foo', 'bar'];
$filteredParameters = array_intersect_key($parameters, array_flip($allowedKeys));

// $filteredParameters contains ['foo' => 'bar', 'bar' => 'baz]

Wenn die parameters keinen zulässigen Schlüssel enthält, besteht die filteredParameters Variable aus einem leeren Array.

Seit PHP 5.6 können Sie array_filter für diese Task verwenden, indem Sie das ARRAY_FILTER_USE_KEY Flag als dritten Parameter übergeben:

$parameters  = ['foo' => 1, 'hello' => 'world'];
$allowedKeys = ['foo', 'bar'];
$filteredParameters = array_filter(
    $parameters,
    function ($key) use ($allowedKeys) {
        return in_array($key, $allowedKeys);
    },
    ARRAY_FILTER_USE_KEY
);

Die Verwendung von array_filter bietet die zusätzliche Flexibilität, einen beliebigen Test mit dem Schlüssel durchzuführen, z. B. könnte $allowedKeys Regex-Muster anstelle von einfachen Zeichenfolgen enthalten. Es gibt außerdem explizit die Absicht des Codes an als array_intersect_key() Kombination mit array_flip() .

Ein Array sortieren

Es gibt verschiedene Sortierfunktionen für Arrays in PHP:

Sortieren()

Ein Array in aufsteigender Reihenfolge nach Wert sortieren.

$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
sort($fruits);
print_r($fruits);

führt in

Array
(
    [0] => Apfel
    [1] => Banane
    [2] => Orange
    [3] => Zitrone
)

rsort ()

Sortieren Sie ein Array in absteigender Reihenfolge nach Wert.

$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
rsort($fruits);
print_r($fruits);

führt in

Array
(
    [0] => Zitrone
    [1] => Orange
    [2] => Banane
    [3] => Apfel
)

asort ()

Sortieren Sie ein Array in aufsteigender Reihenfolge nach Wert, und bewahren Sie die Unabhängigkeit auf.

$fruits = [1 => 'lemon', 2 => 'orange',  3 => 'banana', 4 => 'apple'];
asort($fruits);
print_r($fruits);

führt in

Array
(
    [4] => apple
    [3] => banana
    [1] => lemon
    [2] => orange
)

arsort ()

Sortieren Sie ein Array in absteigender Reihenfolge nach Wert, und bewahren Sie die Unabhängigkeit auf.

$fruits = [1 => 'lemon', 2 => 'orange',  3 => 'banana', 4 => 'apple'];
arsort($fruits);
print_r($fruits);

führt in

Array
(
    [2] => orange
    [1] => lemon
    [3] => banana
    [4] => apple
)

ksort ()

Sortieren Sie ein Array in aufsteigender Reihenfolge nach Schlüssel

$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
ksort($fruits);
print_r($fruits);

führt in

Array
(
    [a] => orange
    [b] => banana
    [c] => apple
    [d] => lemon
)

krsort ()

Sortieren Sie ein Array in absteigender Reihenfolge nach Schlüssel.

$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
krsort($fruits);
print_r($fruits);

führt in

Array
(
    [d] => lemon
    [c] => apple
    [b] => banana
    [a] => orange
)

natsort ()

Sortieren Sie ein Array so, wie es ein Mensch tun würde (natürliche Ordnung).

$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natsort($files);
print_r($files);

führt in

Array
(
    [4] => File2.stack
    [0] => File8.stack
    [2] => file7.stack
    [3] => file13.stack
    [1] => file77.stack
)

natcasesort ()

Sortieren Sie ein Array auf eine Art und Weise, die ein Mensch tun würde (natürliche Reihenfolge)

$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natcasesort($files);
print_r($files);

führt in

Array
(
    [4] => File2.stack
    [2] => file7.stack
    [0] => File8.stack
    [3] => file13.stack
    [1] => file77.stack
)

Mischen()

Mischen eines Arrays (zufällig sortiert).

$array = ['aa', 'bb', 'cc'];
shuffle($array);
print_r($array);

Wie in der Beschreibung geschrieben, ist es zufällig, also hier nur ein Beispiel, woraus es resultieren kann

Array
(
    [0] => cc
    [1] => bb
    [2] => aa
)

usort ()

Sortieren Sie ein Array mit einer benutzerdefinierten Vergleichsfunktion.

function compare($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$array = [3, 2, 5, 6, 1];
usort($array, 'compare');
print_r($array);

führt in

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
    [4] => 6
)

uasort ()

Sortieren Sie ein Array mit einer benutzerdefinierten Vergleichsfunktion, und behalten Sie die Schlüssel bei.

function compare($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$array = ['a' => 1, 'b' => -3, 'c' => 5, 'd' => 3, 'e' => -5];
uasort($array, 'compare');
print_r($array);

führt in

Array
(
    [e] => -5
    [b] => -3
    [a] => 1
    [d] => 3
    [c] => 5
)

uksort ()

Sortieren Sie ein Array nach Schlüsseln mit einer benutzerdefinierten Vergleichsfunktion.

function compare($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$array = ['ee' => 1, 'g' => -3, '4' => 5, 'k' => 3, 'oo' => -5];

uksort($array, 'compare');
print_r($array);

führt in

Array
(
    [ee] => 1
    [g] => -3
    [k] => 3
    [oo] => -5
    [4] => 5
)

Werte mit Schlüsseln austauschen

array_flip Funktion array_flip tauscht alle Schlüssel mit ihren Elementen aus.

$colors = array(
    'one' => 'red',
    'two' => 'blue',
    'three' => 'yellow',
);

array_flip($colors); //will output

array(
    'red' => 'one',
    'blue' => 'two',
    'yellow' => 'three'
)

Verbinden Sie zwei Arrays in einem Array

$a1 = array("red","green");
$a2 = array("blue","yellow");
print_r(array_merge($a1,$a2));

/*
    Array ( [0] => red [1] => green [2] => blue [3] => yellow )
*/

Assoziatives Array:

$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge($a1,$a2));
/*
    Array ( [a] => red [b] => yellow [c] => blue )
*/
  1. Führt die Elemente eines oder mehrerer Arrays zusammen, sodass die Werte von einem an das Ende des vorherigen Arrays angehängt werden. Es gibt das resultierende Array zurück.
  2. Wenn die Eingabearrays die gleichen Zeichenfolgenschlüssel haben, überschreibt der spätere Wert für diesen Schlüssel den vorherigen. Wenn die Arrays jedoch numerische Schlüssel enthalten, wird der ursprüngliche Wert nicht durch den späteren Wert überschrieben, sondern angehängt.
  3. Werte im Eingabefeld mit numerischen Schlüsseln werden mit inkrementierenden Schlüsseln beginnend mit Null im Ergebnisfeld nummeriert.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow