php 设置数组为空格,如何在php中修剪数组值的空格

我有一个数组如下

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

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

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

array_map和trim可以完成这项工作

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

print_r($trimmed_array);

优秀。 比使用array_walk或foreach循环简单得多

如果我想使用rtrim功能怎么办...

ravisoni,你会映射那个功能;array_map('rtrim', $fruit);。 希望能帮助到你 :)

美丽......

工作很好,坦克男人!

这个更好的$ fruit = array_map('trim',$ fruit);

如果其中一个水果是f.e的数组会发生什么。 异国水果?

@Halfacht这不是一个递归函数,在这种情况下你必须编写自己的递归函数

这有什么特别之处吗? 它对我不起作用:/

用分号分割成数组,从Jack和Fred中删除前导空格,然后排序数组。 $ data ="Billy Bank; Jack Hall; Fred Barr"; $ names = explode(";",$ data); $ names = array_map('ltrim',$ names);ASORT($名); 得爱PHP!

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

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上的第二个示例

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

foreach($array as $key => $value)

{

$array[$key] = trim($value);

print("-");

print($array[$key]);

print("-");

print("");

}

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

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

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

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

多维解决方案:

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

如果值为NULL,则修改array_map更改类型。

更好的方法:

$result = array_map(function($v){

return is_string($v)?trim($v):$v;

}, $array);

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

$data = array_map(

function ($item) {

return is_string($item) ? trim($item) : $item;

},

$data

);

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

";

// ARRAY WALK

$start = microtime(true);

for ($i = 0; $i < 100000; $i++) {

array_walk($array, 'trim');

}

$time = (microtime(true) - $start);

echo"Array walk    :" . $time ." seconds

";

// 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

";

// 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

";

上面代码的输出是:

数组映射:8.6775720119476秒

数组步行:10.423238992691秒

Foreach:7.3502039909363秒

适用于:9.8266389369965秒

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

所有这些代码和文本中的原始问题都有答案吗?

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

if (is_array($array)) {

foreach ($array as $key => $val) {

$array[$key] = trim($val);

}

}

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

这只是接受的答案的重复。

function trimArray(&$value)

{

$value = trim($value);

}

$pmcArray = array('php ','mysql ', ' code ');

array_walk($pmcArray, 'trimArray');

测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值