我有一个数组如下
$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');
测试