Codeception - REST - 从数组返回第x个键

时间:2014-04-03 21:26:52

标签: php arrays object codeception

我正在尝试从一个数组中获取一个密钥,Codeception正在通过它的REST模块,更具体地说,' grabDataFromJsonResponse'方法。我想从该数组中提取第一个键,因为grabDataFromJsonResponse函数允许我选择足够远,只返回我需要的数据。但是,Codeception似乎将它转换为一个对象,因此,我得到了错误的密钥。下面是一个codeample,以及一个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总是会失败,因为第一个键如下:

  Codeception\Maybe Object
  (
  [position:protected] => 0
  [val:protected] => Array
      (
          [123456] => Array
              (    etc.

使用上面的key()返回' position:protected'。如何挖掘数组并返回123456?由123456表示的数组键将基于REST响应动态显示。

谢谢!

1 个答案:

答案 0 :(得分:1)

最后的解决方案是将对象转换为数组,对数组进行切片(因为Codeception的Maybe对象转换为数组会添加公共属性并且我们想要去除),并拉出所需的键:

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

$ JSONParsed然后在上面的例子中返回'123456'。