Конвертировать массив PHP в Javascript


185

Как я могу преобразовать массив PHP в такой формат

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
)

в массив Javascript в формате ниже?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];

3
Вы можете уточнить свой вопрос? Вы действительно пытаетесь создать массив JavaScript, или вы пытаетесь создать строку, которую вы можете поместить в scriptтег, который его создаст, или вы пытаетесь создать JSON для отправки в ответ на запрос ajax, или ... (Кроме того , стоит проверить , как форматировать окно на правой стороне , когда вы задаете ваш вопрос, и страница связана с [?] чуть выше области вопроса.)
TJ Crowder

Ответы:


60

Ответ Спадли в порядке .

Уведомление о безопасности: вам больше не нужно следующее

Если у вас нет PHP 5.2, вы можете использовать что-то вроде этого:

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), ';';

2
согласен: если вы используете старый PHP, вам нужно написать свой собственный. Тем не менее, вы должны также рассмотреть возможность обновления вашего PHP, если это вообще возможно!
Спадли

5
Даже если вы используете старый PHP, не пишите свой собственный, возьмите существующую библиотеку, которая поддерживается / используется более чем одним человеком / проектом. Таким образом, этот ответ показывает только то, как что-то можно сделать, но он не должен рекомендовать это - независимо от версии PHP. Например, pear.php.net/package/Services_JSON
Хакре,

Ты прав. Однако приведенный выше код использовался / тестировался годами в двух крупных проектах.
Удо G

1
Кстати, вы добавили вызов array_map. И, честно говоря, нет необходимости редактировать совершенно правильный ответ на исходный вопрос и пометить его «Уведомлением о безопасности», если оно не вызывает проблем с безопасностью.
Udo G

1
@ UdoG: если вы не согласны с редактированием, вы можете редактировать его самостоятельно. Хакре считает, что для кого-то, кто читает этот вопрос, было бы разумно использовать библиотеку, которая, как известно, безопасна и хорошо протестирована, например, от Pear, а не просто брать этот код по достоинству. Также стоит отметить, что PHP 5.2 уже не поддерживал, когда задавался этот вопрос. Как я сейчас пишу, он не поддерживается в течение двух лет и имеет известные проблемы безопасности, которые не будут исправлены. Поэтому проблема безопасности заключается в простом использовании PHP 5.2, прежде чем мы даже рассмотрим код в этом ответе.
Спадли
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.