วิธีการตัดช่องว่างสีขาวของค่าอาร์เรย์ใน php


185

ฉันมีอาร์เรย์ดังนี้

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

ฉันต้องการอาร์เรย์ที่มีค่าโดยไม่มีช่องว่างสีขาวด้านใดด้านหนึ่ง แต่มันสามารถมีค่าว่างวิธีการทำเช่นนี้ใน php.the อาร์เรย์ออกควรเป็นเช่นนี้

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

คำตอบ:


486

array_mapและ trimสามารถทำงานได้

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

4
ยอดเยี่ยม มากง่ายกว่าการใช้ array_walk หรือห่วง foreach
ไรอัน

10
Ravisoni คุณจะแมปฟังก์ชันนั้น array_map('rtrim', $fruit);. หวังว่ามันจะช่วยให้ :)
Jongosi

อันนี้ดีกว่า $ fruit = array_map ('trim', $ fruit);
Yasar Arafath

1
จะเกิดอะไรขึ้นถ้าผลไม้ชนิดใดชนิดหนึ่งเป็นผลไม้ fe Exotic?
Halfacht

@Halfacht นี่ไม่ใช่ฟังก์ชั่นวนซ้ำคุณจะต้องเขียนฟังก์ชั่นวนซ้ำของคุณเองในกรณีนี้
DarkMukke


2

ฉันมีปัญหากับคำตอบที่มีอยู่เมื่อใช้อาร์เรย์หลายมิติ วิธีนี้ใช้ได้ผลสำหรับฉัน

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

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

2

หากคุณต้องการตัดและพิมพ์ Array หนึ่งมิติหรือมิติที่ลึกที่สุดของ Array หลายมิติคุณควรใช้:

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

หากคุณต้องการตัด แต่ไม่ต้องการพิมพ์ Array หนึ่งมิติหรือมิติที่ลึกที่สุดของ Array หลายมิติคุณควรใช้:

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

2

วิธีการแก้ปัญหาหลายมิติหลักฐาน:

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

ขอบคุณ! การยืนยันนี้จริงจะตัดเนื้อหาที่ซ้อนกันมากเกินไปและไม่สนใจพวกเขาหรือการตั้งค่าให้ null
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";

ผลลัพธ์ของรหัสข้างต้นคือ:

Array map: 8.6775720119476 วินาที
Array walk: 10.423238992691 วินาที
Foreach: 7.3502039909363 วินาที
สำหรับ: 9.8266389369965 วินาที

แน่นอนค่านี้อาจเปลี่ยนแปลง แต่ฉันจะบอกว่า foreach เป็นตัวเลือกที่ดีที่สุด


มีคำตอบสำหรับคำถามต้นฉบับในรหัสและข้อความทั้งหมดนี้หรือไม่
Chris K

0

array_map('trim', $data)จะแปลง subarrays nullทั้งหมดลง หากจำเป็นต้องตัดช่องว่างเฉพาะสำหรับสตริงและปล่อยประเภทอื่นตามที่เป็นอยู่คุณสามารถใช้:

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


0

เพียงคุณสามารถใช้ regex เพื่อตัดช่องว่างทั้งหมดหรือย่อขนาดรายการอาเรย์ของคุณ

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

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

โดยใช้ฟังก์ชั่น array_walk เราสามารถลบพื้นที่ออกจากองค์ประกอบอาร์เรย์และองค์ประกอบส่งคืนผลลัพธ์ในอาร์เรย์เดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.