У меня есть эта переменная $a
var_dump($a) array(3) { [0]=> string(10) "designer" [1]=> string(8) "director" [2]=> string(10) "Freelancer"}
Я отправляю это в ajax (jquery)
JQuery
data: 'form=<?php echo json_encode($a); ?>',
и в другом php-файле я делаю
$send = $_POST[form]; $b = json_encode($send); $c = json_decode($b, true); var_dump($c);
выход будет:
string(xx) "[\"designer\",\"director\",\"Freelancer\"]"
но, echo $c[0]
показывает это: [
и должен быть " designer
"
Любая помощь ?
EDIT: уже попробовал
$send = $_POST['form']; $c = json_decode($send, true); var_dump($c); output: `null`
Потому что $c
на самом деле является строкой "[\" designer \ ", \" director \ ", \" Freelancer \ "]", а не массив ["designer", "director", "Freelancer"]
. Похоже, вы дважды вызываете json_encode
в своем контенте, а json_decode
один раз.
form=<?php echo json_encode($a); ?>
form=<?php echo json_encode($a); ?>
будет кодировать ваш контент один раз, прежде чем отправлять его по кабелю. $send = $_POST[form];
получит этот контент (уже json_encoded). $b = json_encode($send);
будет кодировать это же содержимое во второй раз. $c = json_decode($b, true);
будет декодировать его. Это оставит вас с сохраненным контентом. Я не совсем уверен, что означает пункт 3-го шага, и мне кажется, что его удаление должно решить вашу проблему.
РЕДАКТИРОВАТЬ:
Поскольку вы обновили вопрос о том, что вы получаете null
если вы попробуете предлагаемое решение, согласно документации PHP для json_decode :
NULL возвращается, если json не может быть декодирован или если кодированные данные глубже, чем предел рекурсии.
Вы должны убедиться, что данные настроены именно так, как вы хотите, так как я не думаю, что ваш уровень рекурсии в этом случае слишком глубок (из данных, которые вы указали, кажется, что их нет вообще).
$_POST[form]
уже является строкой, кодированной JSON. Если вы снова закодируете его, а затем декодируете, вы получите ту же строку , но не массив. Вам не нужен $b = json_encode($send)
.
Также похоже, что у вас есть Magic Quotes. Выключите их или выполните документацию, чтобы очистить строки: http://www.php.net/magic_quotes
Кроме того, укажите индексы массива!
$send = $_POST['form'];
http://www.php.net/manual/en/language.types.array.php#language.types.array.donts