如何在php中修剪数组值的空格

时间:2011-04-23 05:41:38

标签: php arrays

我有一个数组如下

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

我想要一个数组,其中包含两边都没有空格的值,但它可以包含空值,如何在php中执行此操作。输出数组应该是这样的

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

13 个答案:

答案 0 :(得分:438)

array_maptrim可以完成这项工作

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

答案 1 :(得分:7)

array_walk()可与trim()一起使用来修剪数组

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

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

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

?>

请参阅http://www.php.net/manual/en/function.trim.php

上的第二个示例

答案 2 :(得分:2)

如果数组是多维的,这将很有用:

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

一个样本测试是这样的:

$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 ) )

答案 3 :(得分:2)

如果要修剪和打印一维数组或多维数组的最深维度,则应使用:

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

如果要修剪但不想打印一维数组或多维数组的最深维度,则应使用:

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

答案 4 :(得分:1)

如果您不想丢失关联数组的元素,请不要使用 array_walkarray_map

foreach 解决方案的略短版本:

foreach($array as &$val)
   $val = trim($val);

这适用于关联数组。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

使用多维数组时,我遇到了现有答案的问题。这个解决方案适合我。

window

答案 7 :(得分: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";

上面代码的输出是:

阵列图:8.6775720119476秒
数组步行:10.423238992691秒
Foreach:7.3502039909363秒
适用:9.8266389369965秒

这个值当然可能会改变,但我会说foreach是最好的选择。

答案 8 :(得分:0)

array_map('trim', $data)会将所有子数组转换为null。如果只需要修剪字符串的空格并保留其他类型,则可以使用:

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

答案 9 :(得分:0)

如果您的值为NULL,则array_map中的修剪更改类型。

更好的方法:

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

答案 10 :(得分:0)

多维解决方案:

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

答案 11 :(得分:0)

您只需使用正则表达式即可修剪所有空格或缩小数组项

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

答案 12 :(得分:-1)

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

Test