Comment couper les espaces blancs des valeurs de tableau en PHP

186

J'ai un tableau comme suit

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

Je veux un tableau qui contient les valeurs sans les espaces blancs de chaque côté mais il peut contenir des valeurs vides comment faire cela en php.le tableau de sortie devrait être comme ça

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

Réponses:

495

array_map et trim peuvent faire le travail

$trimmed_array = array_map('trim', $fruit);
print_r($trimmed_array);
Shakti Singh
la source
4
Excellent. Beaucoup plus simple que d'utiliser array_walk ou une boucle foreach
Ryan
10
ravisoni, vous mapperiez cette fonction; array_map('rtrim', $fruit);. J'espère que ça aide :)
Jongosi
celui-ci est meilleur $ fruit = array_map ('trim', $ fruit);
Yasar Arafath
1
Que se passe-t-il si l'un des fruits est une gamme de fruits exotiques fe?
Halfacht
@Halfacht ce n'est pas une fonction récursive, vous devrez écrire votre propre fonction récursive dans ce cas
DarkMukke
8

array_walk()peut être utilisé avec trim()pour couper le tableau

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

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

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

?>

Voir le deuxième exemple sur http://www.php.net/manual/en/function.trim.php

Shiv Kumar Sah
la source
2

J'ai eu des problèmes avec les réponses existantes lors de l'utilisation de tableaux multidimensionnels. Cette solution fonctionne pour moi.

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

Si le tableau est multidimensionnel, cela fonctionnera très bien:

//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);
}

un échantillon de test est comme ceci:

$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
la source
2

Si vous souhaitez découper et imprimer un tableau unidimensionnel ou la dimension la plus profonde d'un tableau multidimensionnel, vous devez utiliser:

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

Si vous souhaitez découper mais ne souhaitez pas imprimer un tableau unidimensionnel ou la dimension la plus profonde d'un tableau multidimensionnel, vous devez utiliser:

$array = array_map('trim', $array);
Branimir Viljevac
la source
2

Solution à l'épreuve multidimensionnelle:

array_walk_recursive($array, function(&$arrValue, $arrKey){ $arrValue = trim($arrValue);});
Xénox
la source
Merci! Confirmer cela réduira également le contenu imbriqué, et ne l'ignorera pas ni ne le définira surnull .
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";

La sortie du code ci-dessus est:

Carte du tableau: 8,6775720119476 secondes Parcours du
tableau: 10,423238992691 secondes
Foreach: 7,3502039909363 secondes
Pendant: 9,8266389369965 secondes

Ces valeurs peuvent bien sûr changer, mais je dirais que foreach est la meilleure option.

Jésus
la source
Y a-t-il une réponse à la question originale dans tout ce code et texte?
Chris K
0

array_map('trim', $data)convertirait tous les sous-tableaux en null. S'il est nécessaire de couper les espaces uniquement pour les chaînes et de laisser les autres types tels quels, vous pouvez utiliser:

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

Trim in array_map change de type si vous avez NULL dans la valeur.

Meilleure façon de le faire:

$result = array_map(function($v){ 
  return is_string($v)?trim($v):$v; 
}, $array);
Piotr Nowak
la source
0

vous pouvez simplement utiliser regex pour couper tous les espaces ou réduire les éléments de votre tableau

$array = array_map(function ($item) {
    return preg_replace('/\s+/', '', $item);
}, $array);
Abolfazl Sharifi
la source
-3
function trimArray(&$value) 
{ 
    $value = trim($value); 
}
$pmcArray = array('php ','mysql ', ' code ');
array_walk($pmcArray, 'trimArray');

en utilisant la fonction array_walk, nous pouvons supprimer l'espace des éléments du tableau et les éléments retournent le résultat dans le même tableau.

Kamal
la source