Intereting Posts
как придерживаться принципа Don't-Repeat-Yourself (DRY), когда будет слишком много if-then-else, делая код нечитаемым? Массив ссылки на функцию в PHP PHP – Строка поиска для определенного массива слов и совпадение с необязательным + или – Шлюз PayPal отклонил запрос. Заголовок безопасности недопустим (# 10002: ошибка безопасности Magento Как очистить поля формы и распечатать сообщение об успешном завершении после отправки ajax-формы Инъекция зависимостей Laravel: когда вам нужно? Когда вы можете издеваться над фасадами? Преимущества любого метода? Как выбрать долготу, широту вокруг определения местоположения от mysql? CodeIgniter с фатальной ошибкой PHPExcel не может переопределять класс IOFactory Создал новую переменную, потянув значение из таблицы MySQL migs (MasterCard Virtual Payment Client) интеграция php PHP preg_replace: Нечувствительность к регистру с чувствительностью к регистру Регулярное выражение для соответствия блоку HTML Викинг в PHP на Windows Массив – Как получить значение EXTJS & PHP Загрузить файл

json_decode для массива, не работает

У меня есть эта переменная $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 один раз.

  1. form=<?php echo json_encode($a); ?> form=<?php echo json_encode($a); ?> будет кодировать ваш контент один раз, прежде чем отправлять его по кабелю.
  2. $send = $_POST[form]; получит этот контент (уже json_encoded).
  3. $b = json_encode($send); будет кодировать это же содержимое во второй раз.
  4. $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