За последние 24 часа нас посетили 233980 программистов и 1739 роботов. Сейчас ищут 1968 программистов ...

JSON & array()/object

Тема в разделе "PHP для новичков", создана пользователем thunderpick, 8 дек 2011.

  1. thunderpick

    thunderpick Активный пользователь

    С нами с:
    10 апр 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Москва
    Всем привет!

    есть массив объектов, но при выводе в json_encode этот массив сам становица объектом =( как исправить, помогите!
    PHP:
    1.  
    2. [products] => Array
    3.         (
    4.             [5] => stdClass Object
    5.                 (
    6.                     [id] => 5
    7.                     [name] => productName
    8.                     [priceByLine] => 3780
    9.                     [price] => 70
    10.                     [link] => /goods/item/id/5
    11.                     [quantity] => 54
    12.                 )
    13.         )
    14.  
    на выходе получаю это
    Код (Text):
    1.  
    2. "products":{"5":{"id":"5","name":"productName","priceByLine":3780,"price":"70","link":"\/goods\/item\/id\/5","quantity":54},...},...
    а надо так
    Код (Text):
    1.  
    2. "products":["5":{"id":"5","name":"productName","priceByLine":3780,"price":"70","link":"\/goods\/item\/id\/5","quantity":54},...],...
    Укажите на ошибку или помогите найти решение....
    Заранее спасибо.
     
  2. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    второй параметр в json_encode
     
  3. thunderpick

    thunderpick Активный пользователь

    С нами с:
    10 апр 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Москва
    его нет, если ставить JSON_FORCE_OBJECT то ещё один массив станет объектом.... так что хз уже....уже каким только извратом не занимался - и пихал в массив (
    PHP:
    1. foreach($g as $gg){array_push($tmp, json_encode($gg));}
    ) и выводил потом строкой(с заголовком)типа
    Код (Text):
    1. echo implode(',',$tmp);
    не помогает, что делать хз....
     
  4. thunderpick

    thunderpick Активный пользователь

    С нами с:
    10 апр 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Москва
    так никто не знает?
     
  5. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    все знают, никто отвечать не хочет :))

    всё правильно. в javascript-е нет ассоциативных массивов - либо списки, либо объекты. а чем тебе объект не нравится?
    Если твой "php массив" не имеет только integer ключей, начинающихся с нуля - то тогда это будет объект. Если же в твоём массиве хоть один ключ будет не цифрой или идти не по порядку - то тогда массив будет представлен как javascript объект.

    тебе нужно смотреть не в сторону json_encode, а в сторону json_decode http://php.net/manual/ru/function.json-decode.html
    вторым параметром указывается хочешь ли ты чтобы javascript объекты были преобразованы в ассоциативные массивы в пхп (по умолчанию - нет)