Cách cắt khoảng trắng của giá trị mảng trong php


185

Tôi có một mảng như sau

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

Tôi muốn một mảng chứa các giá trị không có khoảng trắng ở hai bên nhưng nó có thể chứa các giá trị trống làm thế nào để làm điều này trong php.the mảng đầu ra phải như thế này

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

Câu trả lời:


486

mảng_map trim có thể thực hiện công việc

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

4
Thông minh. Đơn giản hơn nhiều so với sử dụng mảng_walk hoặc vòng lặp foreach
Ryan

10
ravisoni, bạn sẽ ánh xạ chức năng đó; array_map('rtrim', $fruit);. Hy vọng nó sẽ giúp :)
Jongosi

cái này tốt hơn $ fruit = Array_map ('trim', $ fruit);
Yasar Arafath

1
Điều gì xảy ra nếu một trong những loại trái cây là một mảng của Trái cây kỳ lạ?
Halfacht

@Halfacht đây không phải là một hàm đệ quy, bạn sẽ phải viết hàm đệ quy của riêng bạn trong trường hợp này
DarkMukke

7

array_walk()có thể được sử dụng với trim()để cắt mảng

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

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

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

?>

Xem ví dụ thứ 2 tại http://www.php.net/manual/en/feft.trim.php


2

Tôi gặp rắc rối với các câu trả lời hiện có khi sử dụng mảng nhiều chiều. Giải pháp này hiệu quả với tôi.

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

2

Nếu mảng là đa chiều, điều này sẽ hoạt động rất tốt:

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

một bài kiểm tra mẫu là như thế này:

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

2

Nếu bạn muốn cắt và in Mảng một chiều hoặc chiều sâu nhất của Mảng đa chiều, bạn nên sử dụng:

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

Nếu bạn muốn cắt nhưng không muốn in Mảng một chiều hoặc chiều sâu nhất của Mảng đa chiều, bạn nên sử dụng:

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

2

Giải pháp đa chiều:

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

Cảm ơn! Xác nhận điều này thực sự cũng sẽ cắt bớt nội dung lồng nhau, và không bỏ qua chúng hoặc đặt thànhnull .
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";

Đầu ra của mã ở trên là:

Bản đồ mảng: 8,6775720119476 giây
Đi bộ mảng: 10,4 23238992691 giây
Foreach: 7.3502039909363 giây
Trong: 9.8266389369965 giây

Giá trị này tất nhiên có thể thay đổi nhưng tôi muốn nói foreach là lựa chọn tốt nhất.


Có câu trả lời cho câu hỏi ban đầu trong tất cả các mã và văn bản này không?
Chris K

0

array_map('trim', $data)sẽ chuyển đổi tất cả các chương trình con thành null. Nếu cần cắt bớt khoảng trắng chỉ cho các chuỗi và để lại các loại khác, bạn có thể sử dụng:

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

0

Cắt theo kiểu thay đổi mảng_map nếu bạn có giá trị NULL.

Cách tốt hơn để làm điều đó:

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

0

đơn giản là bạn có thể sử dụng regex để cắt tất cả các khoảng trắng hoặc thu nhỏ các mục mảng của bạn

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

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

Kiểm tra

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.