Konwertuj tablicę php na JavaScript

184

Jak przekonwertować tablicę PHP w formacie takim jak ten

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
)

do tablicy JavaScript w poniższym formacie?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];
user663878
źródło
3
Czy możesz wyjaśnić swoje pytanie? Czy naprawdę próbujesz utworzyć tablicę JavaScript, czy próbujesz utworzyć ciąg znaków, który możesz umieścić w scriptznaczniku, który ją utworzy, czy też próbujesz utworzyć JSON, aby odesłać go w odpowiedzi na żądanie ajax, czy ... (Warto również sprawdzić pole „ Jak sformatować ” po prawej stronie, gdy zadajesz pytanie, oraz stronę połączoną z [?] Tuż nad obszarem pytania.)
TJ Crowder

Odpowiedzi:

60

Odpowiedź Spudleya jest w porządku .

Uwaga dotycząca bezpieczeństwa: Poniższe informacje nie powinny być już dla Ciebie konieczne

Jeśli nie masz PHP 5.2, możesz użyć czegoś takiego:

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), ';';
Udo G.
źródło
2
uzgodnione: jeśli używasz starego PHP, musisz napisać własny. Powinieneś jednak rozważyć aktualizację PHP, jeśli to w ogóle możliwe!
Spudley,
5
Nawet jeśli używasz starego PHP, nie pisz własnej, weź istniejącą bibliotekę, która jest utrzymywana / używana przez więcej niż jedną osobę / projekt. Ta odpowiedź pokazuje tylko, jak coś można zrobić, ale nie powinna tego zalecać - niezależnie od wersji PHP. Np. Pear.php.net/package/Services_JSON
hakre
Masz rację. Jednak powyższy kod był używany / testowany od lat w dwóch dużych projektach.
Udo G
1
BTW, ty dodał wezwanie array_map. I szczerze mówiąc, nie ma potrzeby edytowania idealnie poprawnej odpowiedzi na pierwotne pytanie i oznaczenia go „Informacją o bezpieczeństwie”, gdy nie wiąże się to z żadnymi problemami z bezpieczeństwem.
Udo G
1
@UdoG: jeśli nie zgadzasz się z edycją, możesz ją edytować samodzielnie. hakre ma rację, że rozsądnie byłoby, gdyby ktoś czytający to pytanie używał biblioteki, o której wiadomo, że jest bezpieczny i dobrze przetestowany, np. od Peara, a nie tylko biorąc ten kod za zasługi. Warto również zauważyć, że PHP 5.2 nie było już obsługiwane, kiedy zadano to pytanie. Jak piszę teraz, nie jest obsługiwany przez dwa lata i zna problemy bezpieczeństwa, które nie zostaną załatane. Dlatego kwestią bezpieczeństwa jest po prostu używanie PHP 5.2, zanim jeszcze rozważymy kod w tej odpowiedzi.
Spudley
437

Zakładam, że dwie tablice, które podałeś dla PHP i JS, nie są powiązane i są tylko przykładami tego, jak tablice wyglądają w tych dwóch językach. Oczywiście nie będziesz w stanie przekonwertować tych sekwencji liter i cyfr na nazwy tych miast.

PHP posiada funkcję konwersji tablic PHP w kodzie JavaScript: json_encode(). (technicznie jest to format JSON; JSON oznacza JavaScript Object Notation)

Użyj tego w ten sposób:

<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>

Aby uzyskać więcej informacji, zobacz także stronę podręcznika, do której link prowadziłem powyżej.

Pamiętaj, że json_encode()jest dostępny tylko w PHP 5.2 i nowszych, więc jeśli używasz starszej wersji, musisz użyć istniejącej - strona podręcznika PHP zawiera również komentarze z funkcjami napisanymi przez osoby, które jej potrzebowały. (ale to powiedziawszy, jeśli używasz czegoś starszego niż PHP 5.2, powinieneś zaktualizować jak najszybciej)

Spudley
źródło
Brakuje średnika na końcu tablicy javascript, a także nie w ten sposób inicjowane są tablice PHP (wypróbuj tablicę ('abc' ....)) ... i tak głosuj, ponieważ prawdopodobnie tego chce OP
Daniel Sloof 11.04.11
@Spudley Cześć, próbowałem tego, a javascript próbował uzyskać dostęp do tablicy utworzonej w php jako takiej console.log('stuff: ' + javascript_array[0]);, ale mówi, javascript_arrayże nie został zdefiniowany
Growler
Jeśli tablica PHP zawiera znaki specjalne, to pójdzie źle. Możesz uciec od znaków specjalnych za pomocą funkcji urlencode (). Zobacz moją odpowiedź: stackoverflow.com/questions/5618925/...
Ben Rogmans
1
Żeby wskazać, że json_encode definiuje obiekt JavaScript, NIE tablicę.
Patrick Moore,
1
@PatrickMoore - jeśli masz zamiar być pedantyczny, json_encodewypisuje ciąg JSON, który może reprezentować albo obiekt JS lub tablicę JS, albo nawet pojedynczą wartość skalarną, jeśli ją przekażesz. Przykłady w mojej odpowiedzi wygenerują tablicę JavaScript, a nie obiekt.
Spudley,
39

Głupi i prosty:

var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
Eric
źródło
6
Z ciekawości : co by się stało, gdyby ciąg zawierał cudzysłowy, podwójne cudzysłowy i / lub przecinek?
Nis
1
Ponieważ jest do tego funkcja, należy ją preferować nad improwizowanym rozwiązaniem, chyba że jest ku temu dobry powód; nie podano tutaj przyczyny.
cjbarth
działa lepiej dla znaków Unicode (w moim przypadku urdu)
Hammad Khan
33

Nie musisz wywoływać parsJSON, ponieważ wynikiem json_encodejest literał javascript. Po prostu przypisz ją do zmiennej 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>
Jaykishan
źródło
23

możesz przekonwertować tablice php na javascript używając json_encodefunkcji 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>
Dipesh KC
źródło
3
ta pętla jest okropna
Eric,
2
Cóż, to było w celach demonstracyjnych :)
Dipesh KC
7
@Eric przykład zastosowano bezpośrednio jak to jest z pytaniem. Mógłbym użyć, console.log()ale samo pytanie jest bardzo proste (a wielu użytkowników nie ma doświadczenia z narzędziem do sprawdzania kodu przeglądarki), więc zdecydowałem się użyć alert (), ponieważ użytkownik zobaczy to bezpośrednio. Ale dobrze o tym wiesz nie jest tą częścią pytania, tylko sposobem na sprawdzenie, czy logika działa, czy nie.
Dipesh KC,
17

Znajduję najszybszy i najłatwiejszy sposób pracy z tablicą PHP w JavaScript:

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);?>');
użytkownik3065931
źródło
10

tak prosty ...!

użyj tej metody:

<?php echo json_encode($your_array); ?>; 

w laravel blade {{}} użyj tej metody:

{{ str_replace('&quot;', '', json_encode($your_array)) }} 

pracuje dla powiązanej i niepowiązanej tablicy.

اسماعیل زارع
źródło
1
Metoda @MohammadKawsara działa najlepiej dla mnie, oczywiście, jeśli ufasz danym użytkownika.
Tomas Crofty
6

możesz również zrobić w ten sposób

<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>
fajne Quazi
źródło
6

To bardzo proste, używam w ten sposób:

JAVASCRIPT :

var arrayJavascript = <?php echo json_encode($arrayPhp) ?>;

Konwertuj tablicę PHP na JavaScript

Pozdrowienia!

Radames E. Hernandez
źródło
4

W przypadku tablicy wielowymiarowej w PHP4 możesz użyć następującego dodatku do kodu opublikowanego przez 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());
Szlifierka
źródło
4

To moja funkcja. JavaScript musi być w PHP, w przeciwnym razie użyj 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>

Ostatni wiersz może być .... text (jsArray); i będą wyświetlane „1,2,3,4,5,6”

japetko
źródło
3

Używam fałszywej tablicy php

<?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>

jeśli kiedykolwiek twoja tablica jest nieznana (już wykonana)

<?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>
Mik
źródło
... lub możesz implode () pierwszą tablicę, aby uzyskać „fałszywą”. Wiem, że to stara odpowiedź, ale ten pomysł przyszedł mi do głowy.
Peter Lenjo
1
jasne, ale moja droga jest najszybsza ze wszystkich sugestii na tej stronie. Czasami prędkość może być ważnym czynnikiem.
Mik
2

Można to zrobić w bezpieczniejszy sposób.

Jeśli twoja tablica PHP zawiera znaki specjalne, musisz użyć rawurlencode () w PHP, a następnie użyć decodeURIComponent () w JS, aby je uciec. I parsuj JSON do natywnego js. Spróbuj tego:

var data = JSON.parse(
        decodeURIComponent(
            "<?=rawurlencode(json_encode($data));?>"
        )
    );

console.log(data);
Ben Rogmans
źródło
1

Miałem ten sam problem i tak to zrobiłem.

/*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. 
        }
   });
});

Mam nadzieję, że to pomoże.

Conceptree
źródło
1

Nie komplikuj :

var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');
Fifi
źródło
0

Jeśli potrzebujesz wielowymiarowej tablicy PHP, która zostanie wydrukowana bezpośrednio w kodzie źródłowym strony HTML, oraz w wcięty, czytelny dla człowieka JavaScript Object Notation (aka JSON), skorzystaj z tej miłej funkcji, którą znalazłem w http://php.net/manual /en/function.json-encode.php#102091 kodowany przez kogoś o pseudonimie „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;
}

?>       
Heitor
źródło
Nieważne, proszę !! Teraz możemy po prostu użyć tego: json_encode ($ array, JSON_PRETTY_PRINT); i bądź szczęśliwy!
Heitor,
0

Poniżej znajduje się dość prosta sztuczka do konwersji tablicy PHP na tablicę JavaScript:

$array = array("one","two","three");

JS poniżej:

// 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);

To działa jak urok.

prashant parmar
źródło