Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: WHK en 23 Enero 2012, 18:05 pm



Título: Convertir Array de php a Array de javascript
Publicado por: WHK en 23 Enero 2012, 18:05 pm
Necesitaba pasar un array multidimensional gigante a javascript para poder manipularlo desde el cliente (explorador) sin la necesidad de estar haciendo peticiones multiples al servidor atraves de ajax.

Se me ocurrió utilizar json pero tube problemas debido a que json_encode() solo funciona con carácteres utf8 y no utilizo utf8 debido a acentos y eñes en cajas de texto y base de datos y tendria que decodificar todo a utf8 o pasar todo a htmlentities pero por asuntos de seguridad no lo hago.

Se me ocurrió también usar serialize pero la única función buena que encontré era de phpjs.org, pero lamentablemente me dió error, no reconocó las multiples dimensines de mi array.

Asi que después de buscar y buscar y buscar sin éxito decidí hacer mi función que convierte cualquier array multidimensional de php en array de javascript.

No puede convertir objetos que no sean arrays, strings, booleanos o integers.

Si quieres pueden modificarlo para aceptar valores float, pharseInt() o booleano directo, yo prefiero binario 1:0 para valores booleanos.

Código
  1. function toArrJs($array, $callback, $recursive = false){
  2. if(!is_array($array))
  3. return ''; /* No es un array */
  4. $return = ($recursive ? '' : 'var ').$callback." = new Array();\n";
  5.  
  6. foreach($array as $var => $val){
  7. if(is_array($val)){
  8. $return .= toArrJs($val, $callback."['".urlencode($var)."']'", true);
  9. }else{
  10. if(is_numeric($val))
  11. $return .= $callback."['".urlencode($var)."'] = ".(int)$val.";\n";
  12. else
  13. $return .= $callback."['".urlencode($var)."'] = '".str_replace(array('%','+'), array('\\x', ' '), urlencode($val))."';\n";
  14. }
  15. }
  16. return $return;
  17. }
  18.  
  19. $array = array(
  20. 'uno' => 'item1',
  21. 'dos' => array(
  22.  'a' => 'letra a',
  23.  'b' => 'letra b'
  24. )
  25. );
  26. echo toArrJs($array, 'callback');

Saludos.