За последние 24 часа нас посетили 37205 программистов и 1721 робот. Сейчас ищут 611 программистов ...

Выборка из массива

Тема в разделе "Прочие вопросы по PHP", создана пользователем TigerZaka, 24 май 2013.

  1. TigerZaka

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

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Подключаю сервис управления предприятием к сайту
    Код (Text):
    1.  
    2. $request = new SdfApi_Request( $accessId, $secretKey, $host, true );
    3.  
    4. $folder = 'incoming';
    5. $status = 'actual';
    6.  
    7. $response = json_decode(
    8.     $request->get(
    9.         '/BumsTaskApiV01/Task/list.api',
    10.         array(
    11.             'Folder' => $folder,
    12.             'Status' => $status
    13.         )
    14.     )
    15. );
    16. var_dump($response);
    var_dump:
    Код (Text):
    1.  
    2. object(stdClass)#6 (2) {
    3.   ["data"]=> object(stdClass)#7 (1)
    4.       {
    5.         ["tasks"]=> array(2)
    6.             {
    7.               [0]=> object(stdClass)#8 (16)
    8.                   {
    9.                     ["Id"]=> int(1000001)
    10.                     ["Name"]=> string(43) "Интеграция"
    11.                     ["Owner"]=> object(stdClass)#9 (3)
    12.                         {
    13.                           ["Id"]=> string(7) "1000000"
    14.                           ["Name"]=> string(27) "Иван Иванович"
    15.                         }
    16.                   }
    17.               [1]=> object(stdClass)#11 (16)
    18.                   {
    19.                     ["Id"]=> int(1000000)
    20.                     ["Name"]=> string(47) "Протекция"
    21.                     ["Owner"]=> object(stdClass)#12 (3)
    22.                         {
    23.                           ["Id"]=> string(7) "1000000"
    24.                           ["Name"]=> string(27) "Евгений"
    25.                         }
    26.                   }
    27.             }
    28.          ["messages"]=> NULL
    29.       }
    30. }
    Пытаюсь сделать выборку следующим образом:
    Код (Text):
    1.  
    2. foreach(get_object_vars($response->data->tasks) as $key => $value)
    3. {
    4.     echo $key.':'.$value.PHP_EOL;
    5. }
    Когда в json_encode просто массив - все работает.
    А вот с методом внутри не разберусь
    Подскажите, на что надо заменить "$response->data->tasks", чтобы все заработало?
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  3. TigerZaka

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

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Спасибо за ссылку. Сделал следующим образом:
    Код (Text):
    1.  
    2. foreach(get_object_vars($response->{'data'}) as $key => $value){
    3.      foreach ($value as $k => $v) {
    4.         echo $k .' = '.$v->Name.' (Исполнитель: '.$v->{'Owner'}->Name.')<br/>';
    5.      }
    6. }
    получилось вывести данные:
    Код (Text):
    1.  
    2. 0 = Интеграция (Исполнитель: Иван Иванович)
    3. 1 = Протекция (Исполнитель: Евгений)
    Появилось два вопроса:
    1. Код работает, но можно его как то упростить? Например foreach убрать вложенный..
    2 Не пойму get_object_vars, если его убрать, ничего не меняется. В чем именно его польза?

    Спасибо
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Покажите какой текст json вы парсите?
     
  5. TigerZaka

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

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Код (Text):
    1.  
    2. {
    3.   "status":
    4.   {
    5.     "code":"ok",
    6.     "message":null
    7.   },
    8.   "params":
    9.   {
    10.     "Folder":"all",
    11.     "Status":"any"
    12.   },
    13.   "data":
    14.   {
    15.     "tasks":
    16.     [
    17.       {
    18.         "Id":841,
    19.         "Name":"Test task",
    20.         "Status":"accepted",
    21.         "Deadline":"2010-12-30 16:00:00",
    22.         "Owner":
    23.         {
    24.           "Id":2,
    25.           "Name":"Director"
    26.         },
    27.         "Responsible":
    28.         {
    29.           "Id":651,
    30.           "Name":"Ivanov Ivan"
    31.         },
    32.         "Favorite":"",
    33.         "TimeCreated":"2007-12-13 12:24:12",
    34.         "IsOverdue":true
    35.       },
    36.       {
    37.         "Id":1394,
    38.         "Name":"Another task",
    39.         "Status":"accepted",
    40.         "Deadline":"",
    41.         "Owner":
    42.         {
    43.           "Id":3,
    44.           "Name":"Medvedev Dima"
    45.         },
    46.         "Responsible":
    47.         {
    48.           "Id":651,
    49.           "Name":"Ivanov Ivan"
    50.         },
    51.         "Severity":
    52.         {
    53.           "Id":1,
    54.           "Name":"Hot"
    55.         },
    56.         "SuperTask":
    57.         {
    58.           "Id":1393,
    59.           "Name":"Global task"
    60.         },
    61.         "Project":
    62.         {
    63.           "Id":30,
    64.           "Name":"Megaplan API"
    65.         },
    66.         "Favorite":"1",
    67.         "TimeCreated":"2009-08-17 13:27:28",
    68.         "Folders":["incoming"]
    69.         "IsOverdue":false
    70.       }
    71.     ]
    72.   }
    73. }
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Во первых тут будет " SyntaxError: Unexpected string ", из-за недописанной запятой
    "TimeCreated":"2009-08-17 13:27:28",
    "Folders":["incoming"],
    "IsOverdue":false

    Код (PHP):
    1. $json='{
    2.   "status":
    3.   {
    4.     "code":"ok",
    5.     "message":null
    6.   },
    7.   "params":
    8.   {
    9.     "Folder":"all",
    10.     "Status":"any"
    11.   },
    12.   "data":
    13.   {
    14.     "tasks":
    15.     [
    16.       {
    17.         "Id":841,
    18.         "Name":"Test task",
    19.         "Status":"accepted",
    20.         "Deadline":"2010-12-30 16:00:00",
    21.         "Owner":
    22.         {
    23.           "Id":2,
    24.           "Name":"Director"
    25.         },
    26.         "Responsible":
    27.         {
    28.           "Id":651,
    29.           "Name":"Ivanov Ivan"
    30.         },
    31.         "Favorite":"",
    32.         "TimeCreated":"2007-12-13 12:24:12",
    33.         "IsOverdue":true
    34.       },
    35.       {
    36.         "Id":1394,
    37.         "Name":"Another task",
    38.         "Status":"accepted",
    39.         "Deadline":"",
    40.         "Owner":
    41.         {
    42.           "Id":3,
    43.           "Name":"Medvedev Dima"
    44.         },
    45.         "Responsible":
    46.         {
    47.           "Id":651,
    48.           "Name":"Ivanov Ivan"
    49.         },
    50.         "Severity":
    51.         {
    52.           "Id":1,
    53.           "Name":"Hot"
    54.         },
    55.         "SuperTask":
    56.         {
    57.           "Id":1393,
    58.           "Name":"Global task"
    59.         },
    60.         "Project":
    61.         {
    62.           "Id":30,
    63.           "Name":"Megaplan API"
    64.         },
    65.         "Favorite":"1",
    66.         "TimeCreated":"2009-08-17 13:27:28",
    67.         "Folders":["incoming"],
    68.         "IsOverdue":false
    69.       }
    70.     ]
    71.   }
    72. }';
    73.  
    74. $json=json_decode($json);
    75.  
    76. foreach($json->data->tasks as $value) {
    77.     echo nl2br("[Id: {$value->Id}
    78.         Name: {$value->Name}
    79.         Owner:{
    80.         Id: {$value->Owner->Id}
    81.         Name: {$value->Owner->Name}
    82.         }]
    83.         
    84.         ");
    85. } 
     
  7. TigerZaka

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

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Спасибо, помогло