【问题标题】:Illegal string offset when accessing array value访问数组值时出现非法的字符串偏移
【发布时间】:2018-01-23 11:15:34
【问题描述】:

我有一个名为 $shops 的数组:

Array
(
    [0] => Array
        (
            [id] => 10
            [open] => Array
                (
                    [0] => Array
                        (
                            [day] => Monday
                            [start] => 09:00:00
                            [end] => 17:00:00
                        )

                    [1] => Array
                        (
                            [day] => Tuesday
                            [start] => 09:00:00
                            [end] => 17:00:00
                        )

                    [2] => Array
                        (
                            [day] => Thursday
                            [start] => 09:00:00
                            [end] => 17:00:00
                        )
                )
        )
)

当我像下面这样循环遍历它时,我得到Illegal string offset 'day'

foreach($shops as $shop)
{
    foreach($shop['open'] as $open)
    {
        print_r($open);
        echo $open['day'];
    }
}

print_r($open) 似乎正确:

Array
(
    [day] => Monday
    [start] => 09:00:00
    [end] => 17:00:00
)

我一定是在做一些愚蠢的事情。有什么问题?

【问题讨论】:

标签: php arrays


【解决方案1】:

我已经详细编写了这些代码并检查了所有迭代。在第二个循环中,第一次迭代没有day index,它的值为10。你可以查看output

$count=0;
echo "<pre>";
foreach ($shops as $shop) {
    print_r($shop);
    echo "first\n";
    foreach($shop as $open)
    {
        echo "second\n";
        print_r($open);
        if(isset($open[0]))
        {
            foreach ($open as  $value) {
                print_r($value['day']);
            }
        }


    }

}

您也可以检查此代码。此代码的输出为 Here 。进一步您可以将其拆分为nested foreach loop

<?php

$shops = Array
(
    0 => Array
        (
            'id' => 10,
            'open' => Array
                (
                    0 => Array
                        (
                            'day' => 'Monday',
                            'start' => '09:00:00',
                            'end' => '17:00:00',
                        ),

                    1 => Array
                        (
                            'day' => 'Tuesday',
                            'start' => '09:00:00',
                            'end' => '17:00:00',
                        ),

                    2 => Array
                        (
                            'day' => 'Thursday',
                            'start' => '09:00:00',
                            'end' => '17:00:00',
                        ),
                )
        )
);


foreach ($shops[0]['open'] as $open) {
    print_r($open['day']);
    echo "<br>";
}

【讨论】:

    【解决方案2】:

    传入的愚蠢:/当我在数组上循环时,我发现最后一个元素没有日期、开始或结束 - 只是活动的。因此抛出错误的原因。我只是错过了它,因为数组很大并且它抛出了错误而没有显示任何以前的值,所以我认为它在第一个元素上中断了。

    Array
    (
        [0] => Array
            (
                [id] => 10
                [open] => Array
                    (
                        [0] => Array
                            (
                                [day] => Monday
                                [start] => 09:00:00
                                [end] => 17:00:00
                            )
    
                        [1] => Array
                            (
                                [day] => Tuesday
                                [start] => 09:00:00
                                [end] => 17:00:00
                            )
    
                        [2] => Array
                            (
                                [day] => Thursday
                                [start] => 09:00:00
                                [end] => 17:00:00
                            )
                        [3] => Array
                            (
                                [active] => 1
                            )
                    )
            )
    )
    

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 2018-02-11
      • 2014-02-16
      • 1970-01-01
      • 2015-07-23
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多