2011-02-05 6 views
7

탭을 사용하여 삽입하기 전에 array_values ​​() 안의 값에서 태그를 제거하고 싶습니다.PHP : array_values ​​() 내 값에서 태그를 제거하십시오.

나는 아래이 줄을 시도했지만 나는 오류를 가지고

$output = implode("\t",strip_tags(array_keys($item))); 

이상적으로 나는 값에서 줄 바꿈, 이중 공백, 탭을 제거하려면,

$output = implode("\t",preg_replace(array("/\t/", "/\s{2,}/", "/\n/"), array("", " ", " "), strip_tags(array_keys($item)))); 

하지만 내 방법이 맞지 않다고 생각해!

이 전체 기능입니다

,
function process_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     # loop the items 
     foreach($items as $item) 
     { 
      if (is_array($item) && !empty($item)) 
      { 
       if ($row == 0) 
       { 
        # write the column headers 
        $output = implode("\t",array_keys($item)); 
        $output .= "\n"; 
       } 

       # create a line of values for this row... 
       $output .= implode("\t",array_values($item)); 
       $output .= "\n"; 

       # increment the row so we don't create headers all over again 
       $row++; 
      } 
     }  
    } 

    # return the result 
    return $output; 
} 

는 어떻게이 문제를 해결하는 아이디어가 있으면 알려 주시기 바랍니다. 감사!

답변

3

strip_tags은 배열 입력이 아닌 문자열에서만 작동합니다. 따라서 implode 입력 문자열을 만든 후에 적용해야합니다.

$output = strip_tags(
    implode("\t", 
     preg_replace(
      array("/\t/", "/\s{2,}/", "/\n/"), 
      array("", " ", " "), 
      array_keys($item) 
     ) 
    ) 
); 

원하는 결과가 나오면 테스트해야합니다. preg_replace가 무엇을 달성하는지 모르겠습니다.

그렇지 않으면 먼저 제거 태그를 가지고 array_map("strip_tags", array_keys($item))을 사용할 수 있습니다 (정말 문자열에서 태그 내에서 상당한 \t가있는 경우.)

(아무 생각이 당신의 큰 기능에 대해 어떻게하지 않습니다.)

+0

고맙습니다. 이 기능은 Excel 파일을 내보내는 데 사용됩니다. 하지만 값에 태그, 줄 바꿈 등이있을 때 '버그'가 발생했습니다. – laukok

2

태그를 제거하는 것은 다음과 같이 쉽습니다.

$a = array('key'=>'array item<br>'); 

function fix(&$item, $key) 
{ 
    $item = strip_tags($item); 
} 

array_walk($a, 'fix'); 

print_r($a); 

물론 수정 기능에서 $ item을 (를) 수정할 수 있습니다. 변경 내용은 배열에 저장됩니다.

다차원 배열의 경우 use array_walk_recursive($a, 'fix');.

+0

함수 fix()에서 $ key의 용도는 무엇입니까? 그 변수 et all을 사용하지 않는 것 같습니다. 감사. – pal4life

+0

'array_walk'는 아이템과 키를 전달하는 콜백을 호출합니다. '$ key'를 선언하지 않으면 PHP는 그것을 무시할 것이므로 빠져 나갈 수 있습니다. 4 년이 지났지 만 그 이유를 기억하지 못합니다.하지만 추측 해봐야한다면 * 두 번째 논쟁에서 열쇠를 얻는다는 것을 보여주고 싶었습니다. * b) * 나는 느꼈습니다. 이 방법은 더 엄격하고 완전합니다. 나는 더 좋아합니다. * c) * 저는 이것을 키를 포함하는 미리보기에 기반을 두었고, 심지어는 알지도 못했습니다. :) – GolezTrol

+0

예, 4 년은 상당히 시간이었습니다. 응답에 감사 드리며, array_walk를 사용해 본 적이 없으므로 그것에 대해 잘 알고 있습니다. – pal4life

3

배열을 strip_tags에 매핑하고 잘라냅니다.

implode("\t", array_map("trim", array_map("strip_tags", array_keys($item)))); 
1

strip_tags는 배열이 아니기 때문에 array_map을 사용해야합니다.

$arr = array( "Some\tTabbed\tValue" => '1', 
       "Some value with double spaces" => '2', 
       "Some\nvalue\nwith\nnewlines" => '3', 
      ); 

$search = array("#\t#", "#\s{2,}#", "#\n#"); 
$replace = array("", " ", " "); 
$output = implode("\t", preg_replace($search, $replace, array_map('strip_tags', array_keys($arr)))); 
echo $output; 
+0

감사합니다. 그것은 지금 완벽하게 작동합니다! – laukok

관련 문제