2010-10-12 14 views
9

$ jobs es una matriz recuperada de una consulta DB. print_r($jobs) espectáculos:Aplicar una función a todos los valores en una matriz

Array 
(
    [ID] => 131 
    [Title] => -bla- 
    [Baseline] => lorem ipsum ... 
    [Description] => <ul><li>list 1</li><li>list 2</li></ul> 
    [EventID] => 1008 
) 
Array 
(
    [ID] => 132 
    [Title] => -bla 2- 
    [Baseline] => lorem ipsum lorem ipsum... 
    [Description] => <ul><li>list 1</li><li>list 2</li></ul> 
    [EventID] => 1009 
) 

etc ...

Id les gusta correr utf8_encode() en todos los valores de estas matrices. No estoy seguro de si debería usar array_map, array_walk_recursive? La salida no debe alterar los nombres de las claves del array de manera que no necesito cambiar nada en mi plantilla, por lo

<h1><?=$j['title']?></h1> 

debería funcionar, aunque UTF8 codificada.

EDIT: Estoy tratando los siguientes, sin suerte

function fix_chars($key, $value) 
{ 
    return utf8_encode($value); 
} 

array_walk_recursive($jobs, 'fix_chars'); 
+0

mira mi respuesta. el & antes del artículo $ es crucial. – ITroubs

+1

Básicamente, la diferencia entre 'array_map' y' array_walk' es que la primera devuelve una nueva matriz, mientras que la última cambiará la matriz en su lugar. ¿Qué deseas? –

Respuesta

23

esto debería funcionar:

<?php 
function encode_items(&$item, $key) 
{ 
    $item = utf8_encode($item); 
} 

array_walk_recursive($jobs, 'encode_items'); 
?> 
+0

esto cambia el elemento de la matriz directamente dejando que la clave como estaba – ITroubs

+0

funcione, gracias ITroubs – stef

6

Aquí se muestra un ejemplo con array_map():

function utf8_encode_array($array) { 
    return array_map('utf8_encode', $array); 
} 

$encoded_array = array_map('utf8_encode_array', $your_array); 

No sé si hay una diferencia de rendimiento entre array_map y array_walk_recursive.

+0

Gracias @Felix King También estaba enfrentando el mismo problema y ahora resuelve 'array_map ('utf8_encode', $ array);' trabajo para yo. – user3833682

Cuestiones relacionadas