with keys intval array_walk_recursive array_walk array_reduce array_map array php arrays foreach

intval - php array_map with keys



array_walk vs array_map vs foreach (2)

Estoy tratando de comparar estos tres pero parece que solo funciona array_map .

$input = array( '' hello '',''whsdf '','' lve you'','' ''); $input2 = array( '' hello '',''whsdf '','' lve you'','' ''); $input3 = array( '' hello '',''whsdf '','' lve you'','' ''); $time_start = microtime(true); $input = array_map(''trim'',$input); $time_end = microtime(true); $time = $time_end - $time_start; echo "Did array_map in $time seconds<br>"; foreach($input as $in){ echo "''$in'': ".strlen($in)."<br>"; } //////////////////////////////////////////////// $time_start = microtime(true); array_walk($input2,''trim''); $time_end = microtime(true); $time = $time_end - $time_start; echo "Did array_walk in $time seconds<br>"; foreach($input2 as $in){ echo "''$in'': ".strlen($in)."<br>"; } //////////////////////////////////////////////// $time_start = microtime(true); foreach($input3 as $in){ $in = trim($in); } $time_end = microtime(true); $time = $time_end - $time_start; echo "Did foreach in $time seconds<br>"; foreach($input3 as $in){ echo "''$in'': ".strlen($in)."<br>"; }

¿Qué estoy haciendo mal? Aquí está la salida:

Did array_map in 0.00018000602722168 seconds ''hello'': 5 ''whsdf'': 5 ''lve you'': 7 '''': 0 Did array_walk in 0.00014209747314453 seconds '' hello '': 10 ''whsdf '': 41 '' lve you'': 37 '' '': 30 Did foreach in 0.00012993812561035 seconds '' hello '': 10 ''whsdf '': 41 '' lve you'': 37 '' '': 30

No es recorte para array_walk y el bucle foreach .


A partir de PHP 5.3 Funciones anónimas posibles. ex:

$arr = array(''1<br/>'',''<a href="#">2</a>'',''<p>3</p>'',''<span>4</span>'',''<div>5</div>''); array_walk($arr, function(&$arg){ $arg = strip_tags($arg); }); var_dump($arr); // 1,2,3,4,5 ;-)

Que te diviertas.


array_walk no mira lo que da la función de resultado. En su lugar, pasa la devolución de llamada una referencia al valor del elemento. Así que su código para que funcione debe ser

function walk_trim(&$value) { $value = trim($value); }

foreach tampoco almacena valores modificados en sí mismo. Cambiarlo a

foreach ($input3 as &$in) { $in = trim($in); }

Leer más sobre referencias .