PHP에서 배열 값의 공백을 자르는 방법


185

다음과 같은 배열이 있습니다

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

양쪽에 공백이없는 값을 포함하는 배열을 원하지만 PHP 에서이 작업을 수행하는 방법에 빈 값이 포함될 수 있습니다. 출력 배열은 다음과 같아야합니다

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

답변:


486

array_map trim 은 작업을 수행 할 수 있습니다.

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

4
우수한. array_walk 또는 foreach 루프를 사용하는 것보다 훨씬 간단합니다.
Ryan

10
ravisoni, 당신은 그 기능을 매핑 할 것입니다; array_map('rtrim', $fruit);. 도움이
되길 바랍니다

이것은 더 나은 $ fruit = array_map ( 'trim', $ fruit);
Yasar Arafath

1
과일 중 하나가 fe 이국적인 과일의 배열 인 경우 어떻게됩니까?
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

1 차원 배열 또는 다차원 배열의 가장 깊은 차원 을 자르고 인쇄 하려면 다음을 사용해야합니다.

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

1 차원 배열이나 다차원 배열의 가장 깊은 차원 을 자르고 싶지 는 않으려면 다음을 사용해야합니다.

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

위 코드의 결과는 다음과 같습니다.

어레이 맵 : 8.6775720119476 초
어레이 워크 : 10.423238992691 초
Foreach : 7.3502039909363 초
For : 9.8266389369965 초

물론이 값은 변경 될 수 있지만 foreach가 최선의 선택이라고 말할 수 있습니다.


이 코드와 텍스트 모두에 원래 질문에 대한 답변이 있습니까?
Chris K

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 함수를 사용하여 배열 요소에서 공간을 제거하고 요소가 동일한 배열로 결과를 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.