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');
n92
quelle

Antworten:

486

array_map und trim können den Job erledigen

$trimmed_array = array_map('trim', $fruit);
print_r($trimmed_array);
Shakti Singh
quelle
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

Shiv Kumar Sah
quelle
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);
    }
}
Gans
quelle
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 ) )
Elnoor
quelle
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);
Branimir Viljevac
quelle
2

Mehrdimensionale Lösung:

array_walk_recursive($array, function(&$arrValue, $arrKey){ $arrValue = trim($arrValue);});
Xenox
quelle
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.

Jesus
quelle
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
);
Aistis
quelle
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);
Piotr Nowak
quelle
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);
Abolfazl Sharifi
quelle
-2
function trimArray(&$value) 
{ 
    $value = trim($value); 
}
$pmcArray = array('php ','mysql ', ' code ');
array_walk($pmcArray, 'trimArray');

Prüfung

Kamal
quelle