পিএইচপি-তে অ্যারে মানের সাদা স্পেসগুলি কীভাবে ছাঁটাবেন


185

আমি নীচে একটি অ্যারে আছে

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

আমি একটি অ্যারে চাই যা উভয় পক্ষের শ্বেত স্পেস ব্যতীত মানগুলি ধারণ করে তবে এটি পিএইচপি এ কীভাবে খালি মূল্য যুক্ত করতে পারে .আউটপুট অ্যারেটি এর মতো হওয়া উচিত

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

উত্তর:


486

অ্যারে_ম্যাপ এবং ট্রিম কাজটি করতে পারে

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

4
চমৎকার। অ্যারে_ওয়াক বা ফোরচ লুপ ব্যবহার করার চেয়ে অনেক বেশি সহজ
রায়ান

10
রেভিসনি, আপনি যে ফাংশন মানচিত্র হবে; array_map('rtrim', $fruit);। আশা করি এটি সাহায্য করবে :)
জঙ্গোসি

এটি আরও ভাল $ ফল = অ্যারে_ম্যাপ ('ট্রিম', $ ফল);
ইয়াসার আরাফাত

1
যদি কোনও একটি ফলের বিদেশী ফলের অ্যারে হয় তবে কী হবে?
হাফচ্যাট

@ হালফ্যাচট এটি একটি পুনরাবৃত্ত ফাংশন নয়, আপনাকে এই ক্ষেত্রে আপনার নিজের পুনরাবৃত্ত ফাংশন লিখতে হবে
ডার্কমুককে


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

আপনি যদি একটি মাত্রিক অ্যারে বা বহুমাত্রিক অ্যারের গভীরতম মাত্রাটি ছাঁটাতে এবং মুদ্রণ করতে চান তবে আপনার ব্যবহার করা উচিত:

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

আপনি যদি ছাঁটাই করতে চান তবে একটি মাত্রিক অ্যারে বা বহুমাত্রিক অ্যারের গভীরতম মাত্রাটি মুদ্রণ করতে চান না :

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

2

বহুমাত্রিক-প্রমাণ সমাধান:

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

ধন্যবাদ! এটি নিশ্চিত করা প্রকৃতপক্ষে নেস্টেড সামগ্রীগুলিও ছাঁটাই করবে এবং এগুলি উপেক্ষা করবে না বা সেট করা হবে নাnull
এক্সেল


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";

উপরের কোডটির আউটপুট হল:

অ্যারে মানচিত্র: 8.6775720119476 সেকেন্ড
অ্যারে হাঁটা: 10.423238992691 সেকেন্ড
পূর্বে: 7.3502039909363 সেকেন্ডের
জন্য: 9.8266389369965 সেকেন্ড

এই মানগুলির অবশ্যই পরিবর্তন হতে পারে তবে আমি বলব foreach সেরা বিকল্প।


এই কোড এবং লেখার সমস্তটিতে কি মূল প্রশ্নের উত্তর আছে?
ক্রিস কে

0

array_map('trim', $data)সমস্ত subarrays রূপান্তরিত হবে null। যদি কেবল স্ট্রিংয়ের জন্য স্পেসগুলি ট্রিম করার প্রয়োজন হয় এবং অন্যান্য ধরণগুলি যেমন হয় তেমন রেখে যান তবে আপনি ব্যবহার করতে পারেন:

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

0

অ্যারে_ম্যাপ পরিবর্তন প্রকারে ট্রিম করুন আপনার মানটি যদি নুল হয়।

এটি করার ভাল উপায়:

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

0

কেবলমাত্র আপনি সমস্ত স্থান ছাঁটাই করতে বা আপনার অ্যারে আইটেমগুলিকে ছোট করতে রেগেক্স ব্যবহার করতে পারেন

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

অ্যারে_ওয়াক ফাংশন ব্যবহার করে আমরা অ্যারে উপাদানগুলি থেকে স্থান সরিয়ে ফেলতে পারি এবং উপাদানগুলি একই অ্যারেতে ফলাফলটি ফিরিয়ে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.