我试图在foreach循环中获取子数组的值。
我看了这个例子,因为它似乎与我的问题非常相关,但遗憾的是我无法让它工作,而且我希望有人可以在我出错的地方找到它。
PHP foreach not working with sub-array
我有一个名为$ booked的数组,在该数组中我有一个子数组$ booked ['30_booked']。 在第二个数组中,有多个值,例如标题,名称,地址等。
我的代码目前看起来像这样:
foreach($booked['30_booking'] as $new_var){
var_dump('</br>', $booked['30_booking']);
var_dump('</br>', $new_var);
var_dump($new_var['title'], $new_var->title, $booked['30_booking']->title); exit();
}
我已经在var_dump语句中输出数据,以尝试让其中一种方法起作用。
不幸的是,$ new_var中没有任何内容可以取出标题,但$ booking ['30_booking'] - &gt;标题
我没有正确地将它写入foreach声明吗?
所有帮助表示感谢 - 谢谢!
编辑:
主阵列输出片段:
array(6) { ["30_booked"]=> object(stdClass)#21 (34) { ["id"]=> string(2) "30" ["title"]=> string(2) "Ms" ["firstname"]=> string(5) "FIRST NAME" ["surname"]=> string(9) "LAST NAME" ["address"]=> string(6) "- -- -" ["postcode"]=> string(7) "FAK E99" ["country"]=> string(14) "United Kingdom" ["phone"]=> string(11) "01221111111" ["alt_phone"]=> string(0) "" ["email"]=> string(25) "fake@fake.co.uk" ["notes"]=> string(8) "FAKE DEAL" } }
编辑2:
Sub Array $ booked ['30_booking']摘录:
object(stdClass)#21 (34) { ["id"]=> string(2) "30" ["title"]=> string(2) "Ms" ["firstname"]=> string(5) "FIRST NAME" ["surname"]=> string(9) "LAST NAME" ["address"]=> string(6) "- -- -" ["postcode"]=> string(7) "FAK E99" ["country"]=> string(14) "United Kingdom" ["phone"]=> string(11) "01221111111" ["alt_phone"]=> string(0) "" ["email"]=> string(25) "fake@fake.co.uk" ["notes"]=> string(8) "FAKE DEAL" }
编辑3:
我的$ new_var的var_dump本身带回了id的值 - 但是当我尝试将第二个值输出子数组“title”时,它不会返回任何内容。
最终修正:
感谢Kita,我意识到我正在返回一个std类对象而不是第二个数组,这是我第一次愚蠢地错过了。因此,我实际上无法预测对象。
这让我想到了这篇文章,它将帮助我解决这个问题:
PHP foreach array with stdClass Object
非常感谢你的帮助!!!
答案 0 :(得分:1)
您期望$booked['30_booking']
内的数组,但实际上有一个stdClass
对象。
array(6) {
["30_booked"]=> object(stdClass)#21 (34) {
["id"]=> string(2) "30"
["title"]=> string(2) "Ms"
["firstname"]=> string(5) "FIRST NAME"
["surname"]=> string(9) "LAST NAME"
["address"]=> string(6) "- -- -"
["postcode"]=> string(7) "FAK E99"
["country"]=> string(14) "United Kingdom"
["phone"]=> string(11) "01221111111"
["alt_phone"]=> string(0) ""
["email"]=> string(25) "fake@fake.co.uk"
["notes"]=> string(8) "FAKE DEAL"
}
//I assume you have left out the other array elements from the Main array snippet.
}
当您使用stdClass
解析没有第二个参数的JSON字符串时,通常会发生array
而不是json_decode()
。
// without second parameter
var_dump( json_decode( '{"id":"30"}' ) );
object(stdClass)#1 (1) {
["id"]=>
string(2) "30"
}
// 'true' as second parameter
var_dump( json_decode( '{"id":"30"}', true ) );
array(1) {
["id"]=>
string(2) "30"
}
以上示例托管在:http://ideone.com/GNMRlD
由于stdClass
对象本身不提供迭代功能,因此将其与foreach
一起使用会产生错误。
您可以使用http://www.if-not-true-then-false.com/2009/php-tip-convert-stdclass-object-to-multidimensional-array-and-convert-multidimensional-array-to-stdclass-object/等功能将stdClass
转换为array
。
答案 1 :(得分:0)
例如。如果你的数组如下所示。我用过的foreach将会工作
$new_array = array(array('total'=>array('title'=>'test','text'=>'text')));
foreach ($new_array as $val)
{
print_r($val['total']['title']); // Use this for array
print_r($val->total->title); // Use this for object
}
如果您的数组如下所示。使用下面的foreach。
$new_array = array(array('total'=>array(array('title'=>'test','text'=>'text'),array('title'=>'test1','text'=>'text1'))));
foreach ($new_array as $val)
{
foreach($val['total'] as $new_val)
{
print_r($new_val['title']);
}
}
答案 2 :(得分:0)
你可以试试这个,我希望能帮到你
foreach($booked as $new_var){
var_dump('</br>', $new_var);
var_dump('</br>',$new_var['30_booking']->title);
}
我认为在你的foreach中有错误的单词30_booking
因为在你的主阵列输出显示中它显示30_booked
检查一下