我正在尝试遍历存储在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" }
答案 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']