使用foreach遍历PHP对象(Stripe客户)

时间:2018-12-27 10:15:57

标签: php stripe-payments

我正在尝试遍历存储在Stripe客户对象中的元数据。

我可以数出物品的数量:

echo count($matchUser->data[0]->metadata);

哪个给我的分数为“ 2”。但是:

foreach($matchUser->data[0]->metadata as $key => $value) {
    echo $key;
    echo $value;
    echo "hello";
}

不返回任何内容。

元数据的各种转储如下:

object(Stripe\StripeObject)#67 (2) { ["testitem"]=> string(5) "hello" ["password_hash"]=> string(6) "myhash" }

2 个答案:

答案 0 :(得分:1)

尝试方法

public function __toArray($recursive = false)
{
    if ($recursive) {
        return Util\Util::convertStripeObjectToArray($this->_values);
    } else {
        return $this->_values;
    }
}

像这样:

$matchArray = $matchUser->__toArray();

要深入了解可用的方法,请查看以下网址:

https://github.com/stripe/stripe-php/blob/master/lib/StripeObject.php

希望有帮助

答案 1 :(得分:0)

我知道这个问题已有两个月之久,而且已经有了公认的答案。我认为有更好的方法。

我认为Stripe API的PHP库的开发人员在某些方法前加上__(双下划线),以表示该方法是受保护的还是私有的,这是从PHP不再具有方法可见性的时代起的一种古老约定。 。现在__前缀保留给PHP: Magic Methods - Manual中所述的魔术方法:

  

PHP保留以__开头的所有函数名称,都是神奇的。

仔细研究StripeObject class之后,我认为下面定义的jsonSerialize方法是更好的选择。

public function jsonSerialize()
{
    return $this->__toArray(true);
}

您可以像这样使用它:

$matchUserArray = $matchUser->jsonSerialize();

// Output "hello" 
echo $matchUserArray['data'][0]['metadata']['testitem']