Json_decode

Discussion in 'PHP' started by Seganapa, 18 Jul 2012.

  1. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Всем привет!

    Имеется такой массив:
    PHP:

    Array
    (
        [
    0] => Array
            (
                [
    0] => {"id":19409,"name":"\\u0420\\u043e\\u0441\\u043d\\u043e\\u0441\\u043a\\u043e\\u043d\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \\u0432 13:57","looted":1342173157}
                [
    1] => {"id":19410,"name":"\\u0413\\u0430\\u0433\\u0430\\u0432\\u0442\\u0430\\u044d","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":472,"oy":147,"offer":"wood","demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \\u0432 21:47","looted":1342460546}
                [
    2] => {"id":19411,"name":"\\u041a\\u043e\\u0433\\u0430\\u0445\\u0438\\u0434\\u0440\\u044d\\u0439","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":680,"oy":234,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
                [
    3] => {"id":19412,"name":"\\u0422\\u0430\\u0445\\u0438\\u0433\\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
                [
    4] => {"id":19413,"name":"\\u0420\\u043e\\u0442\\u0430\\u0440\\u043e\\u0441\\u044d","dir":"n","expansion_stage":4,"x":788,"y":648,"ox":278,"oy":208,"offer":"stone","demand":"iron","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460843,"lootable_human":"16.07.12 \\u0432 21:47","looted":1342460543}
                [
    5] => {"id":19414,"name":"\\u0414\\u043e\\u043d\\u043e\\u0441\\u0433\\u0430\\u0444\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":228,"oy":265,"offer":"wood","demand":"iron","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173456,"lootable_human":"13.07.12 \\u0432 13:57","looted":1342173156}
                [
    6] => {"id":19415,"name":"\\u041d\\u044d\\u0439\\u0440\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":589,"oy":365,"offer":"iron","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
                [
    7] => {"id":19416,"name":"\\u0421\\u0442\\u0440\\u0430\\u0439\\u043d\\u043e\\u0441\\u043a\\u043e\\u0443\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":772,"oy":274,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
            )

    )
    Нужно все его значения прогнать через json_decode

    Понимаю, что нужно использовать foreach... но как правильно написать не знаю... Для каждого элемента в отдельности json_decode срабатывает...
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Ну и пиши типа
    PHP:
    foreach($array[0] as $item)
    {
      echo 
    json_decode($item);
    }
     
    _________________________
  3. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    913
    Likes Received:
    480
    Reputations:
    724
    Вроде этого...
     
    _________________________
    #3 VY_CMa, 18 Jul 2012
    Last edited: 18 Jul 2012
  4. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Так пробовал...

    Ошибка Object of class stdClass could not be converted to string
     
  5. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Тогда выполни var_dump($твой_массив) и покажи результат
     
    _________________________
  6. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Вот var_dump
    PHP:

    array(1) {
      [
    0]=>
      array(
    8) {
        [
    0]=>
        
    string(319"{"id":19409,"name":"\\u0420\\u043e\\u0441\\u043d\\u043e\\u0441\\u043a\\u043e\\u043d\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \\u0432 13:57","looted":1342173157}"
        
    [1]=>
        
    string(298"{"id":19410,"name":"\\u0413\\u0430\\u0433\\u0430\\u0432\\u0442\\u0430\\u044d","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":472,"oy":147,"offer":"wood","demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \\u0432 21:47","looted":1342460546}"
        
    [2]=>
        
    string(232"{"id":19411,"name":"\\u041a\\u043e\\u0433\\u0430\\u0445\\u0438\\u0434\\u0440\\u044d\\u0439","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":680,"oy":234,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}"
        
    [3]=>
        
    string(204"{"id":19412,"name":"\\u0422\\u0430\\u0445\\u0438\\u0433\\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}"
        
    [4]=>
        
    string(298"{"id":19413,"name":"\\u0420\\u043e\\u0442\\u0430\\u0440\\u043e\\u0441\\u044d","dir":"n","expansion_stage":4,"x":788,"y":648,"ox":278,"oy":208,"offer":"stone","demand":"iron","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460843,"lootable_human":"16.07.12 \\u0432 21:47","looted":1342460543}"
        
    [5]=>
        
    string(311"{"id":19414,"name":"\\u0414\\u043e\\u043d\\u043e\\u0441\\u0433\\u0430\\u0444\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":228,"oy":265,"offer":"wood","demand":"iron","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173456,"lootable_human":"13.07.12 \\u0432 13:57","looted":1342173156}"
        
    [6]=>
        
    string(203"{"id":19415,"name":"\\u041d\\u044d\\u0439\\u0440\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":589,"oy":365,"offer":"iron","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}"
        
    [7]=>
        
    string(246"{"id":19416,"name":"\\u0421\\u0442\\u0440\\u0430\\u0439\\u043d\\u043e\\u0441\\u043a\\u043e\\u0443\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":772,"oy":274,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}"
      
    }
    }
     
    Может я вообще не тем путем пошел...
    Мне нужно из этого массива выбрать значения Id, name и relation_status, и положить их в переменные...
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    А, ну да, json_decode не строку возвращает. Посмотри документацию на php.net, там описано как из результата таскать нужные параметры.
    Сам по себе цикл нормальный
     
    _________________________
  8. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    На сколько я знаю, брать значения можно только с помощью json_decode. Или преобразовать массив в строку и оттуда парсить значения (но это не желательно)...

    Может есть другие варианты?
     
  9. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Чем не устраивает вариант, который написал Kaimi вторым постом в теме?
    Хочешь модифицировать исходный массив на лету?
    Почему не почитал мою ссылку, которую я давал на php.net про json_decode? Второй параметр со значением true указывает, что надо преобразовать в массив ассоциативный а не класс.
    PHP:
    for ($i 0$i count($yourArray[0]); $i++) {
    $yourArray[0][$i] = json_decode($yourArray[0][i], true);
    }
    print_r($yourArray);
    print(
    $yourArray[0][2]["name"])
    В чём проблема то у тебя я никак не пойму?
     
  10. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Спасибо Melfis. Теперь все получилось... Просто если использовать foreach, я получаю массив с одинаковыми ключами, и не могу разобраться как далее использовать полученные значения... А через цикл все супер... Спасибо!
     
  11. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Ну если проблема была только в этом, то чтобы знать
    foreach($array as $key=>$value) {}