PHP从子数组中的foreach中检索数据值

时间:2013-07-31 09:23:51

标签: php arrays loops foreach

我试图在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

非常感谢你的帮助!!!

3 个答案:

答案 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 检查一下