Php 遍历多维对象/数组
我有一些来自soap api的数据。此数据采用以下格式:Php 遍历多维对象/数组,php,arrays,object,soap,iteration,Php,Arrays,Object,Soap,Iteration,我有一些来自soap api的数据。此数据采用以下格式: array(2) { ["Request"]=> object(stdClass)#7 (3) { ["AccessKey"]=> string(3) "dub" ["Timestamp"]=> string(19) "2019.07.04 09:06:19" ["Conditions"]=> object(stdClass)#8 (1) { ["
array(2) {
["Request"]=>
object(stdClass)#7 (3) {
["AccessKey"]=>
string(3) "dub"
["Timestamp"]=>
string(19) "2019.07.04 09:06:19"
["Conditions"]=>
object(stdClass)#8 (1) {
["Condition"]=>
object(stdClass)#9 (2) {
["Field"]=>
string(11) "From"
["Value"]=>
string(10) "1562223979"
}
}
}
["Products"]=>
object(stdClass)#10 (1) {
["Product"]=>
array(10) {
[0]=>
object(stdClass)#11 (11) {
["Ean"]=>
string(13) "4029759107323"
["Type"]=>
string(9) "DVD"
["Title"]=>
string(58) "Hellraisers"
["FSK"]=>
string(36) "Freigegeben ohne Altersbeschränkung"
["Genre"]=>
string(5) "Sport"
["Year"]=>
string(4) "2015"
["Length"]=>
string(3) "275"
["Language"]=>
string(7) "Deutsch"
["Items"]=>
string(1) "2"
["Release"]=>
string(10) "2049-12-31"
["Label"]=>
string(17) "Edel Germany GmbH"
}
我想循环浏览这些数据,并获得每一组的标题
我尝试了foreach循环,但收到了一些错误消息
foreach ($results as $result) {
echo "Titel " . $result->Titel;
}
什么都不管用。我不能把我的脑袋放在数组上…当你不了解某件事时,有时最好尽量把它缩小,然后从那里开始增长,开始尝试打印整个响应,然后是属性产品,然后是产品,然后是产品数组: 如何访问
$response
首先,您有一个对象$response
中包含对象的元素,[“Products”]
是我们想要的对象,因此$response->Products
中有一个对象,有一个名为[“Products”]
的属性,包含所有产品的对象数组,因此,$response>产品->产品
。由于$response->Products->Product
是一个数组,我们需要对其进行迭代,您可以这样迭代:
foreach($response->Products->Product as $product){
echo $product->Title; // prints the title of every product
}
如果您不理解或它不起作用,请毫不犹豫地询问,但通过您粘贴的代码,我认为foreach
是正确的
JSON格式建议
顺便说一句,JSON不是“清晰”和“正确”的,产品数组应该在上面一级。在“产品”内部,而不是在“产品”内部。当您没有掌握某个内容时,有时最好尝试将其缩小并从中成长,开始尝试打印整个响应,然后打印属性产品,然后打印产品,然后打印产品阵列: 如何访问
$response
首先,您有一个对象$response
中包含对象的元素,[“Products”]
是我们想要的对象,因此$response->Products
中有一个对象,有一个名为[“Products”]
的属性,包含所有产品的对象数组,因此,$response>产品->产品
。由于$response->Products->Product
是一个数组,我们需要对其进行迭代,您可以这样迭代:
foreach($response->Products->Product as $product){
echo $product->Title; // prints the title of every product
}
如果您不理解或它不起作用,请毫不犹豫地询问,但通过您粘贴的代码,我认为foreach
是正确的
JSON格式建议
顺便说一句,JSON不是“清晰”和“正确”的,产品数组应该在上面一级。在“产品”内部,而不是在“产品”内部。由
Titel
您的意思是Title
?正如您希望该示例的输出将是“Hellraisers”?因为数据看起来好像在另一个元素下-请在您最后的努力中尝试foreach($results['Products']As$result){
。(以及正确的拼写)。结果数组中的两个对象似乎非常不同。我不认为循环是获得这些结果的最佳方式。感谢您的快速响应!@Nigel当我尝试此操作时,我得到了致命错误:未捕获错误:无法在/opt/lampp/htdocs/api_test/index中使用stdClass类型的对象作为数组。php:39堆栈跟踪:#0{main}在线抛出/opt/lampp/htdocs/api_test/index.php39@Dirk还有什么其他方法可以尝试?通过Titel
您的意思是Title
?因为您希望该示例的输出将是“Hellraisers”?因为数据看起来好像在另一个元素下-在您最后的努力中尝试foreach($results['Products']As$result){
。(连同正确的拼写)。结果数组中的两个对象似乎非常不同。我不认为循环是获得这些结果的最佳方式。感谢您的快速响应!@Nigel当我尝试此操作时,我得到了致命错误:未捕获错误:无法在/opt/lampp/htdocs/api_test/index中使用stdClass类型的对象作为数组。php:39堆栈跟踪:#0{main}在线抛出/opt/lampp/htdocs/api_test/index.php39@Dirk我还可以尝试其他方法吗?嘿,Josep!非常感谢您对流程的良好解释。这有助于我更好地理解它。当我尝试您的方法时,我收到以下错误消息:致命错误:未捕获错误:无法在/opt/lampp/htdocs中将stdClass类型的对象用作数组/api#u test/index.php:39堆栈跟踪:#0{main}在第39行的/opt/lampp/htdocs/api#u test/index.php中抛出,如果将产品作为对象进行尝试($response->Products['Product']我得到的消息和我从api得到的数据一样,我不是自己写的。这是我从api得到的JSONit@youwhatmate尝试echo$product->Title
,而不是echo$product['Title'];。如果它不起作用,请使用下一个代码foreach($response['Products]->productas$product){echo$product->Title;//打印每个产品的标题}
Ok经过一些尝试和错误后,我得到了我的结果:-)foreach($response->Products->product as$product){echo$product->Title。“”;}@youwhatmate因为你没有把整个代码都放进去,我不知道主数组也是一个对象,我会编辑代码,马上标记为,谢谢!抱歉!我把你的答案标记为正确的答案!谢谢!嘿,Josep!非常感谢你对过程的好解释。这有助于我更好地理解它。当我尝试你的方法时ch,我得到了这个错误消息:致命错误:未捕获错误:无法在/opt/lampp/htdocs/api_test/index.php中使用stdClass类型的对象作为数组。php:39堆栈跟踪:#0{main}在第39行/opt/lampp/htdocs/api_test/index.php中抛出,如果将产品作为对象进行尝试($response->Products['Product']我得到的消息和我从api得到的数据一样,我不是自己写的。这是我从api得到的JSONit@youwhatmate尝试
echo$product->Title
,而不是echo$product['Title'];。如果它不起作用,请使用下一个代码foreach($response['Products]->productas$product){echo$product->Title;//打印每个产品的标题}
经过一些尝试和错误后,我得到了我的结果:-)foreach($response->Products->product as$product){echo$product->Title。“”;}@youwhatmate as you di