Cara memangkas spasi putih nilai-nilai array di php


185

Saya memiliki array sebagai berikut

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

Saya ingin sebuah array yang berisi nilai-nilai tanpa spasi putih di kedua sisi tetapi dapat berisi nilai-nilai kosong bagaimana melakukan ini di php.the array output harus seperti ini

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

Jawaban:


486

array_map dan trim dapat melakukan pekerjaan

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

4
Luar biasa. Jauh lebih sederhana daripada menggunakan array_walk atau loop foreach
Ryan

10
ravisoni, Anda akan memetakan fungsi itu; array_map('rtrim', $fruit);. Semoga ini membantu :)
Jongosi

yang ini lebih baik $ fruit = array_map ('trim', $ fruit);
Yasar Arafath

1
Apa yang terjadi jika salah satu buahnya adalah array Buah Eksotis?
Halfacht

@Halfacht ini bukan fungsi rekursif, Anda harus menulis fungsi rekursif Anda sendiri dalam kasus ini
DarkMukke


2

Saya mengalami masalah dengan jawaban yang ada saat menggunakan array multidimensi. Solusi ini bekerja untuk saya.

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

2

Jika array multidimensi, ini akan bekerja dengan baik:

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

satu tes sampel seperti ini:

$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

Jika Anda ingin memotong dan mencetak satu dimensi Array atau dimensi terdalam dari multi-dimensi Array Anda harus menggunakan:

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

Jika Anda ingin memotong tetapi tidak ingin mencetak satu dimensi Array atau dimensi terdalam dari multi-dimensi Array Anda harus menggunakan:

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

2

Solusi multidimensi-bukti:

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

Terima kasih! Mengkonfirmasi ini sebenarnya akan memotong konten yang bersarang juga, dan tidak mengabaikannya atau diatur kenull .
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";

Output dari kode di atas adalah:

Peta array: 8,6775720119476 detik Jalan
array: 10,423238992691 detik
Foreach: 7,3502039909363 detik
Untuk: 9,8266389369965 detik

Nilai-nilai ini tentu saja dapat berubah tetapi saya akan mengatakan foreach adalah pilihan terbaik.


Apakah ada jawaban untuk pertanyaan asli dalam semua kode dan teks ini?
Chris K

0

array_map('trim', $data)akan mengubah semua subarrays menjadi null. Jika diperlukan untuk memangkas spasi hanya untuk string dan meninggalkan tipe lain seperti itu, Anda dapat menggunakan:

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

0

Potong di array_map, ganti tipe jika Anda memiliki nilai NULL.

Cara yang lebih baik untuk melakukannya:

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

0

cukup Anda dapat menggunakan regex untuk memangkas semua ruang atau memperkecil item array Anda

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

dengan menggunakan fungsi array_walk, kita dapat menghapus ruang dari elemen array dan elemen mengembalikan hasilnya dalam array yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.