2013-02-12 7 views

Odpowiedz

36

Najpierw array_walk jest źle funkcja dla twojego celu.

drugie, array_map nie zmienia oryginalnej tablicy, lecz zwraca odwzorowaną tablicę. Więc czego potrzebujesz to:

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

dziękuję, nie zauważyłem tego, co zwracał array_map - ale czy mógłbyś podać, dlaczego uznałeś funkcję array_walk za niewłaściwą funkcję? –

+8

jeśli przeczytałeś [podręcznika] (http://php.net/array-walk) zobaczysz, że array_walk po prostu ** wywołuje ** funkcję z każdą z wartości (i kluczy) tablicy. Tak więc miałby taki sam efekt jak: "trim (" test_data_1 ", 0); trim ('test_data_2', 1) '- brak przydziałów, brak efektów ubocznych (i przy okazji niewłaściwy drugi parametr dla przycinania). Ty * możesz * oczywiście napisać własną funkcję dla array_walk, która następnie przycina faktyczny element tablicy. –

0

array_map zwraca nową tablicę, spróbuj tego

$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() jest dobre przygotowanie danych przed sprawdzeniem, lub wkładając ją. Najprawdopodobniej zechcesz jednak przygotować coś więcej niż tylko przyciąć. Fajna technika widziałem wcześniej jest „rura” poprzez swoje funkcje przygotowujących:

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

Piękno robi to w ten sposób sprawia, że ​​kod czytelny i jest to niezwykle łatwe do uruchomienia funkcji dotyczących poszczególnych elementów tablicy.

Oto funkcja Mam zapukał szybko:

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

hej, przepraszam, ale twoja odpowiedź nie wydaje się być odpowiednia dla powyższego pytania –

+0

@ JaakKütt tak, ale przycinanie wartości macierzy służy do przygotowania danych. Czasami pomaga zasugerować bardziej elastyczne podejście do tego, do czego dąży programista. – rybo111

3

Dla array_walk zmodyfikować elementy (wartości) w tablicy, zwrotna musi być funkcja, która bierze swój pierwszy parametr przez odniesienie i modyfikuje go (co nie jest w przypadku zwykłego trim), więc kod stałby się:

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

Alternatywnie, z array_map należy przypisać tablicę z wartości zwracanej, więc kod stałby się:

$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); 
} 
Powiązane problemy