Codeception - остальное - вернуть ключ х из массива


Я пытаюсь получить ключ из массива, который Codeception тянет назад через его модуль REST, более конкретно, метод' grabDataFromJsonResponse'. Я хотел бы вытащить первый ключ из этого массива, так как функция grabDataFromJsonResponse позволяет мне выбрать достаточно далеко, чтобы вернуть только нужные мне данные. Однако кодек, похоже, преобразует его в объект, и, таким образом, я получаю неверный ключ. Ниже приведен пример кода, а также образец (вверху) объекта массива, который является Codeception возвращение:

 public function returningArrayKey(WebGuy $I)
{
    $I->sendPOST(mypostdata);
    $I->seeResponseCodeIs(200);
    $I->seeResponseContains("Success");
    $jsonListingObj = $I->grabDataFromJsonResponse("tree.traversing.traversed");
    $I->checkAgainstKey("123456789", key($jsonListingObj));

}

Функция checkAgainstKey просто выполняет AssertEquals:

function compareListingId($listingId, $oJsonObjectData)
{
    $this->assertEquals($listingId, $oJsonObjectData);
}

Однако, assertEquals всегда будет терпеть неудачу, потому что первый ключ выглядит следующим образом:

  CodeceptionMaybe Object
  (
  [position:protected] => 0
  [val:protected] => Array
      (
          [123456] => Array
              (    etc.

Использование ключа (), как указано выше, возвращает 'position: protected'. Как я могу копаться в массиве и возвращать 123456? Ключ массива представлены 123456 будет динамический, основанный на реакции остальных.

Спасибо!

1 2

1 ответ:

Окончательное решение состояло в том, чтобы привести объект в виде массива, разрезать массив (потому что объект Codeception, возможно, преобразованный в массив, добавляет открытые свойства и такие, которые мы хотим удалить) и вытащить нужный ключ:

$jsonListingObj = $I->grabDataFromJsonResponse("tree.traversing.traversed");
$jsonListingArray = (array)$jsonListingObj;
$JSONParsed = key(current(array_slice($jsonListingArray, 1,1)));

$JSONParsed возвращает значение '123456' в приведенном выше примере.