So schneiden Sie Leerzeichen von Array-Werten in PHP


185

Ich habe ein Array wie folgt

$fruit = array('  apple ','banana   ', ' , ',     '            cranberry ');

Ich möchte ein Array, das die Werte ohne die Leerzeichen auf beiden Seiten enthält, aber es kann leere Werte enthalten, wie dies in PHP gemacht wird. Das Ausgabearray sollte so sein

$fruit = array('apple','banana', ',', 'cranberry');

Antworten:


486

array_map und trim können den Job erledigen

$trimmed_array = array_map('trim', $fruit);
print_r($trimmed_array);

4
Ausgezeichnet. Viel einfacher als die Verwendung von array_walk oder einer foreach-Schleife
Ryan

10
Ravisoni, Sie würden diese Funktion abbilden; array_map('rtrim', $fruit);. Hoffe es hilft :)
Jongosi

dieses bessere $ obst = array_map ('trim', $ obst);
Yasar Arafath

1
Was passiert, wenn eine der Früchte eine Reihe von exotischen Früchten ist?
Halfacht

@ Halfacht Dies ist keine rekursive Funktion, Sie müssen in diesem Fall Ihre eigene rekursive Funktion schreiben
DarkMukke

7

array_walk()kann verwendet werden trim(), um das Array zu trimmen

<?php
function trim_value(&$value) 
{ 
    $value = trim($value); 
}

$fruit = array('apple','banana ', ' cranberry ');
var_dump($fruit);

array_walk($fruit, 'trim_value');
var_dump($fruit);

?>

Siehe das zweite Beispiel unter http://www.php.net/manual/en/function.trim.php


2

Ich hatte Probleme mit den vorhandenen Antworten, wenn ich mehrdimensionale Arrays verwendete. Diese Lösung funktioniert bei mir.

if (is_array($array)) {
    foreach ($array as $key => $val) {
        $array[$key] = trim($val);
    }
}

2

Wenn das Array mehrdimensional ist, funktioniert dies hervorragend:

//trims empty spaces in array elements (recursively trim multidimesional arrays)
function trimData($data){
   if($data == null)
       return null;

   if(is_array($data)){
       return array_map('trimData', $data);
   }else return trim($data);
}

Ein Beispieltest ist wie folgt:

$arr=[" aaa ", " b  ", "m    ", ["  .e  ", "    12 3", "9 0    0 0   "]];
print_r(trimData($arr));
//RESULT
//Array ( [0] => aaa [1] => b [2] => m [3] => Array ( [0] => .e [1] => 12 3 [2] => 9 0 0 0 ) )

2

Wenn Sie ein eindimensionales Array oder die tiefste Dimension eines mehrdimensionalen Arrays zuschneiden und drucken möchten, sollten Sie Folgendes verwenden:

foreach($array as $key => $value)
{
    $array[$key] = trim($value);
    print("-");
    print($array[$key]);
    print("-");
    print("<br>");
}

Wenn Sie ein eindimensionales Array oder die tiefste Dimension eines mehrdimensionalen Arrays zuschneiden, aber nicht drucken möchten, sollten Sie Folgendes verwenden:

$array = array_map('trim', $array);

2

Mehrdimensionale Lösung:

array_walk_recursive($array, function(&$arrValue, $arrKey){ $arrValue = trim($arrValue);});

Vielen Dank! Wenn Sie dies bestätigen, werden auch die verschachtelten Inhalte gekürzt und nicht ignoriert oder auf gesetztnull .
Aexl


0
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

function generateRandomSpaces() {
    $output = '';
    $i = rand(1, 10);
    for ($j = 0; $j <= $i; $j++) {
        $output .= " ";
    }   

    return $output;
}

// Generating an array to test
$array = [];
for ($i = 0; $i <= 1000; $i++) {
    $array[] = generateRandomSpaces() . generateRandomString(10) . generateRandomSpaces(); 
}

// ARRAY MAP
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    $trimmed_array=array_map('trim',$array);
}
$time = (microtime(true) - $start);
echo "Array map: " . $time . " seconds\n";

// ARRAY WALK
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    array_walk($array, 'trim');
}
$time = (microtime(true) - $start);
echo "Array walk    : " . $time . " seconds\n"; 

// FOREACH
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    foreach ($array as $index => $elem) {
        $array[$index] = trim($elem);
    }
}
$time = (microtime(true) - $start);
echo "Foreach: " . $time . " seconds\n";

// FOR
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    for ($j = 0; $j < count($array) - 1; $j++) { 
        $array[$j] = trim($array[$j]);
    }
}
$time = (microtime(true) - $start);
echo "For: " . $time . " seconds\n";

Die Ausgabe des obigen Codes lautet:

Array-Karte: 8.6775720119476 Sekunden
Array-Lauf: 10.423238992691 Sekunden
Foreach: 7.3502039909363 Sekunden
For: 9.8266389369965 Sekunden

Diese Werte können sich natürlich ändern, aber ich würde sagen, dass foreach die beste Option ist.


Gibt es in all diesem Code und Text eine Antwort auf die ursprüngliche Frage?
Chris K

0

array_map('trim', $data)würde alle Subarrays in konvertieren null. Wenn es erforderlich ist, Leerzeichen nur für Zeichenfolgen zu kürzen und andere Typen unverändert zu lassen, können Sie Folgendes verwenden:

$data = array_map(
    function ($item) {
        return is_string($item) ? trim($item) : $item;
    },
    $data
);

0

Trimmen Sie den Änderungstyp array_map, wenn Sie den Wert NULL haben.

Besserer Weg, es zu tun:

$result = array_map(function($v){ 
  return is_string($v)?trim($v):$v; 
}, $array);

0

Sie können einfach Regex verwenden, um alle Leerzeichen zu kürzen oder Ihre Array-Elemente zu minimieren

$array = array_map(function ($item) {
    return preg_replace('/\s+/', '', $item);
}, $array);

-2
function trimArray(&$value) 
{ 
    $value = trim($value); 
}
$pmcArray = array('php ','mysql ', ' code ');
array_walk($pmcArray, 'trimArray');

Prüfung

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.