Probé el enlace que colocaste más arriba (la función array2json, que no requiere php5) y también me funcionó correctamente. A esta altura sospecho que tu problema debe pasar por otro lado.
Esta fue mi prueba:
Código PHP:
<?php
function array2json($arr) {
$parts = array();
$is_list = false;
//Find out if the given array is a numerical array
$keys = array_keys($arr);
$max_length = count($arr)-1;
if(($keys[0] == 0) and ($keys[$max_length] == $max_length)) {//See if the first key is 0 and last key is length - 1
$is_list = true;
for($i=0; $i<count($keys); $i++) { //See if each key correspondes to its position
if($i != $keys[$i]) { //A key fails at position check.
$is_list = false; //It is an associative array.
break;
}
}
}
foreach($arr as $key=>$value) {
if(is_array($value)) { //Custom handling for arrays
if($is_list) $parts[] = array2json($value); /* :RECURSION: */
else $parts[] = '"' . $key . '":' . array2json($value); /* :RECURSION: */
} else {
$str = '';
if(!$is_list) $str = '"' . $key . '":';
//Custom handling for multiple data types
if(is_numeric($value)) $str .= $value; //Numbers
elseif($value === false) $str .= 'false'; //The booleans
elseif($value === true) $str .= 'true';
else $str .= '"' . addslashes($value) . '"'; //All other things
// :TODO: Is there any more datatype we should be in the lookout for? (Object?)
$parts[] = $str;
}
}
$json = implode(',',$parts);
if($is_list) return '[' . $json . ']';//Return numerical JSON
return '{' . $json . '}';//Return associative JSON
}
$algo=array(
array('cod_empresa','num_identificacion','razon_social','representante','tipo_empresa','telefono','direccion'),
array(1,805029800,'Empresa 1','Juliana','Propia','475-89-96','Cr. 9 No. 9-54'),
array(2,14528964,'Empresa 2','Diego','Propia','4516789','Cll 1 No. 13-27')
);
?>
<script>
obj=new Function('return <?php echo array2json($algo) ?>')();
alert(obj[1][3]); //devuelve Juliana
alert(obj[2][2]);//devuelve Empresa 2
</script>