1059 Stimmen

Leere Array-Elemente entfernen

Einige Elemente in meinem Array sind leere Zeichenfolgen auf der Grundlage dessen, was der Benutzer eingegeben hat. Ich muss diese Elemente zu entfernen. Ich habe dies:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

Aber es funktioniert nicht. $linksArray hat immer noch leere Elemente. Ich habe auch versucht, es mit dem empty() Funktion, aber das Ergebnis ist das gleiche.

45voto

helpse Punkte 1470

Sie können einfach tun

array_filter($array)

array_filter: "Wenn kein Callback übergeben wird, werden alle Einträge von input gleich FALSE entfernt." Das bedeutet, dass Elemente mit den Werten NULL, 0, '0', '', FALSE, array() ebenfalls entfernt werden.

Die andere Möglichkeit ist

array_diff($array, array(''))

die Elemente mit den Werten NULL, '' und FALSE entfernt.

Ich hoffe, das hilft :)

UPDATE

Hier ist ein Beispiel.

$a = array(0, '0', NULL, FALSE, '', array());

var_dump(array_filter($a));
// array()

var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());

var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())

Zusammengefasst:

  • 0 oder '0' wird 0 und '0' entfernen
  • NULL, FALSE oder '' entfernt NULL, FALSE und ''

43voto

Mark Baker Punkte 204969
foreach($linksArray as $key => $link) 
{ 
    if($link === '') 
    { 
        unset($linksArray[$key]); 
    } 
} 
print_r($linksArray);

38voto

Nabi K.A.Z. Punkte 8144

Kurz gesagt:

Dies ist der von mir vorgeschlagene Code:

$myarray =  array_values(array_filter(array_map('trim', $myarray), 'strlen'));

Erläuterung:

Ich denke, die Verwendung array_filter ist gut, aber nicht genug, denn Werte sind wie space y \n ... im Array aufbewahren und das ist normalerweise schlecht.

Ich schlage also vor, dass Sie eine Mischung verwenden array_filter y array_map .

array_map ist zum Beschneiden, array_filter ist zum Entfernen leerer Werte, strlen ist zu behalten 0 Wert, und array_values ist für die erneute Indizierung, wenn Sie es brauchen.

Muster:

$myarray = array("\r", "\n", "\r\n", "", " ", "0", "a");

// "\r", "\n", "\r\n", " ", "a"
$new1 = array_filter($myarray);

// "a"
$new2 = array_filter(array_map('trim', $myarray));

// "0", "a"
$new3 = array_filter(array_map('trim', $myarray), 'strlen');

// "0", "a" (reindex)
$new4 = array_values(array_filter(array_map('trim', $myarray), 'strlen'));

var_dump($new1, $new2, $new3, $new4);

Ergebnisse:

array(5) {
  [0]=>
" string(1) "
  [1]=>
  string(1) "
"
  [2]=>
  string(2) "
"
  [4]=>
  string(1) " "
  [6]=>
  string(1) "a"
}
array(1) {
  [6]=>
  string(1) "a"
}
array(2) {
  [5]=>
  string(1) "0"
  [6]=>
  string(1) "a"
}
array(2) {
  [0]=>
  string(1) "0"
  [1]=>
  string(1) "a"
}

Online-Test:

http://sandbox.onlinephpfunctions.com/code/e02f5d8795938be9f0fa6f4c17245a9bf8777404

36voto

marcovtwout Punkte 5172

Eine weitere Zeile, um leere ("" leere Zeichenkette) Elemente aus Ihrem Array zu entfernen.

$array = array_filter($array, function($a) {return $a !== "";});

Hinweis: Dieser Code hält absichtlich null , 0 y false Elemente.


Vielleicht wollen Sie aber auch erst Ihre Array-Elemente trimmen:

$array = array_filter($array, function($a) {
    return trim($a) !== "";
});

Hinweis: Dieser Code entfernt auch die null y false Elemente.

14voto

Jacob Mulquin Punkte 2521

Wenn Sie mit einem numerischen Array arbeiten und das Array nach dem Entfernen leerer Elemente neu indizieren müssen, verwenden Sie die array_values Funktion:

array_values(array_filter($array));

Siehe auch: PHP neu indizieren Array?

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