कैसे php में सरणी मानों के सफेद रिक्त स्थान को ट्रिम करें


185

इस प्रकार मेरे पास एक सरणी है

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

मैं एक ऐसा सरणी चाहता हूं जिसमें दोनों तरफ सफेद रिक्त स्थान के बिना मान हों, लेकिन इसमें खाली मान हो सकते हैं कि इसे कैसे करें। php.the आउटपुट सरणी इस तरह होनी चाहिए

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

जवाबों:


486

array_map और ट्रिम काम कर सकते हैं

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

4
अति उत्कृष्ट। Array_walk या foreach पाश का उपयोग करने की तुलना में बहुत सरल
रयान

10
रैविसन, आप उस फ़ंक्शन को मैप करेंगे; array_map('rtrim', $fruit);। आशा है कि यह मदद करता है :)
जोंगोसी

यह एक बेहतर $ फल = array_map ('ट्रिम', $ फल);
यासर अराफथ

1
यदि फलों में से एक फल एक्सोटिक फलों का एक सरणी है तो क्या होगा?
अर्धशतक

@ हेलफैच यह एक पुनरावर्ती कार्य नहीं है, आपको इस मामले में अपना स्वयं का पुनरावर्ती कार्य लिखना होगा
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

यदि आप एक आयामी ऐरे को ट्रिम और प्रिंट करना चाहते हैं या बहु-आयामी एरे का सबसे गहरा आयाम जो आपको उपयोग करना चाहिए:

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)सभी उपग्रहों में परिवर्तित कर देगा null। यदि इसे केवल स्ट्रिंग्स के लिए रिक्त स्थान को ट्रिम करने और अन्य प्रकारों को छोड़ने के लिए आवश्यक है, तो आप इसका उपयोग कर सकते हैं:

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

0

यदि आपके पास NULL है, तो array_map परिवर्तन प्रकार में ट्रिम करें।

इसे करने का बेहतर तरीका:

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

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

array_walk फ़ंक्शन का उपयोग करके, हम सरणी तत्वों से स्थान निकाल सकते हैं और तत्व उसी सरणी में परिणाम लौटाते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.