2011-02-05 9 views
7

Voglio rimuovere le tag dal valore all'interno di array_values ​​() prima di implodere con le schede.PHP: elimina i tag dal valore all'interno di array_values ​​()

Ho provato con questa linea di seguito ma ho un errore,

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

idealmente voglio togliere le interruzioni di linea, doppi spazi, tabulazioni dal valore,

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

ma pensa che il mio metodo non sia corretto!

questo è l'intera funzione,

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

Per favore fatemi sapere se avete qualche idea su come risolvere questo problema. Grazie!

risposta

3

strip_tags funziona solo su stringhe, non sull'ingresso di array. Quindi è necessario applicarlo dopo implode fatto una stringa di input.

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

Dovrai testare se ti dà i risultati desiderati. Non so cosa comporti il ​​preg_replace.

In caso contrario si potrebbe usare array_map("strip_tags", array_keys($item)) di avere i tag rimossi prima (se ci sono davvero significative \t all'interno dei tag nelle stringhe.)

(Non ho idea di che cosa il vostro grande funzione è circa.)

+0

grazie per questo! questa funzione viene utilizzata per esportare i file Excel. ma ha causato "bug" quando ho tag, interruzioni di linea, ecc nel valore. – laukok

2

Spogliarello i tag è semplice come questo:

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

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

array_walk($a, 'fix'); 

print_r($a); 

Naturalmente, è possibile effettuare tutte le modifiche che ti piace a $ voce nella funzione di correzione. La modifica verrà archiviata nell'array.

Per un array multidimensionale use array_walk_recursive($a, 'fix');.

+0

Qual è lo scopo del tasto $ nella funzione fix()? Non sembra usare quella variabile e tutto. Grazie. – pal4life

+0

'array_walk' chiamerà il callback passandogli l'oggetto e la chiave. PHP probabilmente lo ignorerà con garbo quando non dichiarerai '$ key', quindi potresti lasciarlo fuori. Sono passati quattro anni e non ricordo il motivo, ma se devo indovinare, * a) * Volevo mostrare che hai ottenuto la chiave nel secondo argomento nel caso ne avessi bisogno, * b) * Ho sentito in questo modo è più rigoroso e completo, che mi piace di più, o * c) * Ho basato questo su alcuni frammenti che includevano la chiave e non me ne sono nemmeno accorto. :) – GolezTrol

+0

Sì, naturalmente, 4 anni sono un bel po 'di tempo, quindi grazie per la risposta, non ho mai provato ad usare l'array_walk quindi è bello conoscerlo. – pal4life

3

provare a mappare gli array a strip_tags e trim.

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

Sembra che sia necessario utilizzare array_map, poiché strip_tags si aspetta una stringa, non una matrice.

$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

grazie. funziona perfettamente ora! – laukok