valor - Convierta la matriz php a Javascript
valor de html a php (15)
¿Cómo puedo convertir una matriz PHP en un formato como este?
Array
(
[0] => 001-1234567
[1] => 1234567
[2] => 12345678
[3] => 12345678
[4] => 12345678
[5] => AP1W3242
[6] => AP7X1234
[7] => AS1234
[8] => MH9Z2324
[9] => MX1234
[10] => TN1A3242
[11] => ZZ1234
)
a una matriz de Javascript en el siguiente formato?
var cities = [
"Aberdeen",
"Ada",
"Adamsville",
"Addyston",
"Adelphi",
"Adena",
"Adrian",
"Akron",
"Albany"
];
A continuación se muestra un truco bastante simple para convertir una matriz de PHP a una matriz de JavaScript:
$array = array("one","two","three");
JS a continuación:
// Use PHP tags for json_encode()
var js_json = json_encode($array);
var js_json_string = JSON.stringify(js_json);
var js_json_array = JSON.parse(js_json_string);
alert(js_json_array.length);
Funciona a las mil maravillas.
Esta es mi función. JavaScript debe estar bajo PHP; de lo contrario, use SESSION.
<?php
$phpArray=array(1,2,3,4,5,6);
?>
<div id="arrayCon" style="width:300px;"></div>
<script type="text/javascript">
var jsArray = new Array();
<?php
$numArray=count($phpArray);
for($i=0;$i<$numArray;$i++){
echo "jsArray[$i] = ". $phpArray[$i] . ";/n";
}
?>
$("#arrayCon").text(jsArray[1]);
</script>
La última fila puede ser ... texto (jsArray); y se mostrará "1,2,3,4,5,6"
La forma más rápida y sencilla de trabajar con una matriz PHP en Javascript es hacer esto:
PHP:
$php_arr = array(''a'',''b'',''c'',''d'');
Javascript:
//this gives me a JSON object
js_arr = ''<?php echo JSON_encode($php_arr);?>'';
//Depending on what I use it for I sometimes parse the json so I can work with a straight forward array:
js_arr = JSON.parse(''<?php echo JSON_encode($php_arr);?>'');
No tiene que llamar a parseJSON ya que el resultado de json_encode() es un literal de JavaScript. Simplemente asignes a una variable js.
<script type="text/javascript">
//Assign php generated json to JavaScript variable
var tempArray = <?php echo json_encode($php_array); ?>;
//You will be able to access the properties as
alert(tempArray[0].Key);
</script>
Para una matriz multidimensional en PHP4, puede usar la siguiente adición al código publicado por Udo G:
function js_str($s) {
return ''"''.addcslashes($s, "/0../37/"//").''"'';
}
function js_array($array, $keys_array) {
foreach ($array as $key => $value) {
$new_keys_array = $keys_array;
$new_keys_array[] = $key;
if(is_array($value)) {
echo ''javascript_array'';
foreach($new_keys_array as $key) {
echo ''["''.$key.''"]'';
}
echo '' = new Array();'';
js_array($value, $new_keys_array);
} else {
echo ''javascript_array'';
foreach($new_keys_array as $key) {
echo ''["''.$key.''"]'';
}
echo '' = ''.js_str($value).";";
}
}
}
echo ''var javascript_array = new Array();'';
js_array($php_array, array());
Se puede hacer de una manera más segura.
Si su matriz PHP contiene caracteres especiales, debe usar rawurlencode () en PHP y luego usar decodeURIComponent () en JS para escapar de ellos. Y analizar el JSON a js nativo. Prueba esto:
var data = JSON.parse(
decodeURIComponent(
"<?=rawurlencode(json_encode($data));?>"
)
);
console.log(data);
Si necesita una matriz de PHP multidimensional para imprimir directamente en el código fuente de la página html, y en una forma de Notación de objetos Javascript (también conocida como JSON) legible para humanos, use esta bonita función que encontré en http://php.net/manual/en/function.json-encode.php#102091 codificado por alguien apodado "bohwaz".
<?php
function json_readable_encode($in, $indent = 0, $from_array = false)
{
$_myself = __FUNCTION__;
$_escape = function ($str)
{
return preg_replace("!([/b/t/n/r/f/"//'])!", "//////1", $str);
};
$out = '''';
foreach ($in as $key=>$value)
{
$out .= str_repeat("/t", $indent + 1);
$out .= "/"".$_escape((string)$key)."/": ";
if (is_object($value) || is_array($value))
{
$out .= "/n";
$out .= $_myself($value, $indent + 1);
}
elseif (is_bool($value))
{
$out .= $value ? ''true'' : ''false'';
}
elseif (is_null($value))
{
$out .= ''null'';
}
elseif (is_string($value))
{
$out .= "/"" . $_escape($value) ."/"";
}
else
{
$out .= $value;
}
$out .= ",/n";
}
if (!empty($out))
{
$out = substr($out, 0, -2);
}
$out = str_repeat("/t", $indent) . "{/n" . $out;
$out .= "/n" . str_repeat("/t", $indent) . "}";
return $out;
}
?>
Tonto y simple:
var js_array = [<?php echo ''"''.implode(''","'', $php_array).''"'' ?>];
Tuve el mismo problema y así es como lo hice.
/*PHP FILE*/
<?php
$data = file_get_contents(''http://yourrssdomain.com/rss'');
$data = simplexml_load_string($data);
$articles = array();
foreach($data->channel->item as $item){
$articles[] = array(
''title'' => (string)$item->title,
''description'' => (string)$item ->description,
''link'' => (string)$item ->link,
''guid'' => (string)$item ->guid,
''pubdate'' => (string)$item ->pubDate,
''category'' => (string)$item ->category,
);
}
// IF YOU PRINT_R THE ARTICLES ARRAY YOU WILL GET THE SAME KIND OF ARRAY THAT YOU ARE GETTING SO I CREATE AN OUTPUT STING AND WITH A FOR LOOP I ADD SOME CHARACTERS TO SPLIT LATER WITH JAVASCRIPT
$output="";
for($i = 0; $i < sizeof($articles); $i++){
//# Items
//| Attributes
if($i != 0) $output.="#"; /// IF NOT THE FIRST
// IF NOT THE FIRST ITEM ADD ''#'' TO SEPARATE EACH ITEM AND THEN ''|'' TO SEPARATE EACH ATTRIBUTE OF THE ITEM
$output.=$articles[$i][''title'']."|";
$output.=$articles[$i][''description'']."|";
$output.=$articles[$i][''link'']."|";
$output.=$articles[$i][''guid'']."|";
$output.=$articles[$i][''pubdate'']."|";
$output.=$articles[$i][''category''];
}
echo $output;
?>
/* php file */
/*AJAX COMUNICATION*/
$(document).ready(function(e) {
/*AJAX COMUNICATION*/
var prodlist= [];
var attrlist= [];
$.ajax({
type: "get",
url: "php/fromupnorthrss.php",
data: {feeding: "feedstest"},
}).done(function(data) {
prodlist= data.split(''#'');
for(var i = 0; i < prodlist.length; i++){
attrlist= prodlist[i].split(''|'');
alert(attrlist[0]); /// NOW I CAN REACH EACH ELEMENT HOW I WANT TO.
}
});
});
Espero que ayude.
Voy a suponer que las dos matrices que has dado para PHP y JS no están relacionadas, y son solo ejemplos de cómo se ven las matrices en los dos idiomas. Claramente, no podrá convertir esas secuencias de letras y números en esos nombres de ciudades.
PHP proporciona una función para convertir matrices PHP en código JavaScript: json_encode()
. (técnicamente, es formato JSON; JSON significa Notación de objetos JavaScript)
Úselo así:
<script type=''text/javascript''>
<?php
$php_array = array(''abc'',''def'',''ghi'');
$js_array = json_encode($php_array);
echo "var javascript_array = ". $js_array . ";/n";
?>
</script>
Consulte también la página del manual que he vinculado anteriormente para obtener más información.
Tenga en cuenta que json_encode()
solo está disponible en PHP 5.2 y superior, por lo que si está utilizando una versión anterior, necesitará usar pear.php.net/package/Services_JSON : la página de manual de PHP también incluye comentarios con funciones escritas por personas que lo necesitaban . (pero dicho esto, si está utilizando algo más antiguo que PHP 5.2 debe actualizar lo antes posible)
Yo uso una matriz php falsa
<?php
// instead to create your array like this
$php_array = ["The","quick","brown","fox","jumps","over","the","lazy","dog"];
// do it like this (a simple variable but with separator)
$php_fake_array = "The,quick,brown,fox,jumps,over,the,lazy,dog";
?>
<script type="text/javascript">
// use the same separator for the JS split() function
js_array = ''<?php echo $php_fake_array; ?>''.split('','');
</script>
si alguna vez su matriz es desconocida (ya hecha)
<?php
$php_array = file(''my_file.txt'');
$php_fake_array = "";
// transform your array with concatenate like this
foreach ($php_array as $cell){
// since this array is unknown, use clever separator
$php_fake_array .= $cell.",,,,,";
}
?>
<script type="text/javascript">
// use the same separator for the JS split() function
js_array = ''<?php echo $php_fake_array; ?>''.split('',,,,,'');
</script>
puedes convertir arrays php en javascript usando la función json_encode() de php
<?php $phpArray = array( 0 => 001-1234567, 1 => 1234567, 2 => 12345678, 3 => 12345678, 4 => 12345678, 5 => ''AP1W3242'', 6 => ''AP7X1234'', 7 => ''AS1234'', 8 => ''MH9Z2324'', 9 => ''MX1234'', 10 => ''TN1A3242'', 11 => ''ZZ1234'' ) ?>
<script type="text/javascript">
var jArray= <?php echo json_encode($phpArray ); ?>;
for(var i=0;i<12;i++){
alert(jArray[i]);
}
</script>
también puedes hacer de esta manera
<script>
<?php
$php_array = array(''abc'',''def'',''ghi'');
$code_array = json_encode($php_array);
?>
var array_code = <?php echo $code_array; ?>;
console.log(array_code);
</script>
tan sencillo ...!
usa este método:
<?php echo json_encode($your_array); ?>;
en laravel blade {{}} usa este método:
{{ str_replace(''"'', '''', json_encode($your_array)) }}
trabajando para array asociado y no asociado.
La respuesta de Spudley está bien .
Aviso de seguridad: Lo siguiente no debería ser necesario por más tiempo
Si no tiene PHP 5.2 puede usar algo como esto:
function js_str($s)
{
return ''"'' . addcslashes($s, "/0../37/"//") . ''"'';
}
function js_array($array)
{
$temp = array_map(''js_str'', $array);
return ''['' . implode('','', $temp) . '']'';
}
echo ''var cities = '', js_array($php_cities_array), '';'';