1

我试图在 foreach 循环中获取子数组的值。

我查看了这个示例,因为它似乎与我的问题确实相关,但不幸的是我无法让它工作,我希望这里的人能找到我出错的地方。

PHP foreach 不适用于子数组

我有一个名为 $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 中的任何内容都没有提取标题,但是 $booked['30_booking']->title

我没有正确地将它放入 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:

子数组 $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 类对象而不是第二个数组,这是我第一次愚蠢地错过的东西。因此,我实际上无法在对象上进行 foreach 。

这导致我这篇文章将帮助我解决这个问题:

带有 stdClass 对象的 PHP foreach 数组

非常感谢您的帮助!!!

4

3 回答 3

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.
}

当您在没有第二个参数的情况下解析 JSON 字符串时,通常会发生获取stdClass而不是。arrayjson_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-等函数转换stdClass数组到标准类对象/array

于 2013-07-31T10:04:56.190 回答
0

你可以试试这个,希望对你有帮助

foreach($booked as $new_var){
   var_dump('</br>', $new_var);
   var_dump('</br>',$new_var['30_booking']->title);   
}

我认为在你的 foreach 中存在单词错误,30_booking 因为在你的主数组输出显示中它显示30_booked 检查也

于 2013-07-31T10:02:12.173 回答
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']);
    }
}
于 2013-07-31T09:54:37.627 回答