2013-02-12 10 views

risposta

36

In primo luogo, array_walk è dalla parte del torto funzione per il tuo scopo a tutti.

In secondo luogo, array_map non modifica l'array originale ma restituisce l'array mappato. Quindi, quello che vi serve è:

$a = array_map('trim', $a); 
+1

grazie, mi è mancato ciò che array_map stava restituendo - ma pealse potresti specificare perché considereresti array_walk come una funzione errata? –

+8

se leggi il [manuale] (http://php.net/array-walk) vedrai che array_walk chiama ** ** una funzione con ciascuno dei valori (e delle chiavi) di un array. Quindi avrebbe lo stesso effetto di: 'trim ('test_data_1', 0); trim ('test_data_2', 1) '- nessun compito, nessun effetto collaterale (e un secondo parametro sbagliato per il trim, comunque). Ovviamente * potresti * scrivere la tua funzione per array_walk, che quindi taglia l'effettivo elemento dell'array. –

0

array_map restituire un nuovo array, provate questo

$a=array('test_data_1 ','test_data_2'); 
array_walk($a, 'trim'); 
$a = array_map('trim', $a); 
foreach($a AS $b){ 
    var_dump($b); 
} 
0

trim() è un bene per la preparazione dei dati prima di controllare, o inserirla. Probabilmente vorrai prepararti con più di un semplice assetto. Una tecnica fresco che ho visto prima è quella di "pipe" attraverso le funzioni di preparazione:

$data = prepare($data, array(
    'first_name' => 'trim|custom_function', 
    'surname' => 'trim', 
)); 

La bellezza di fare in questo modo rende il codice facilmente leggibile ed è incredibilmente facile da eseguire funzioni su ogni elementi di array specifici.

Ecco una funzione che ho buttato in fretta:

function prepare($data, $arr){ 
    foreach($arr as $input_name => $functions){ 
    foreach(explode('|', $functions) as $function){ 
     $data[$input_name] = call_user_func($function, $data[$input_name]); 
    } 
    } 
    return $data; 
} 
+4

hey, scusate ma la vostra risposta non sembra pertinente alla domanda sopra –

+0

@ JaakKütt sì, ma il trimming dei valori dell'array serve per preparare i dati. A volte aiuta a suggerire un approccio più flessibile a ciò che lo scopo dello sviluppatore. – rybo111

3

Per array_walk di modificare gli elementi (valori) nella matrice, il callback deve essere una funzione che prende il primo parametro per riferimento e lo modifica (che non è il caso di pianura trim), in modo che il codice sarebbe diventato:

$a=array('test_data_1 ','test_data_2'); 
array_walk($a, function (&$value) { $value = trim($value); }); // by-reference modification 
// (no array_map) 
foreach($a AS $b){ 
    var_dump($b); 
} 

in alternativa, con array_map è necessario riassegnare l'array con il valore di ritorno, in modo che il codice sarebbe diventato:

$a=array('test_data_1 ','test_data_2'); 
// (no array_walk) 
$a = array_map('trim', $a); // array reassignment 
foreach($a AS $b){ 
    var_dump($b); 
} 
Problemi correlati