当数组位于std对象内部时,如何从数组访问数据?错误:字符串偏移量'id'不合法

时间:2019-10-09 00:06:18

标签: laravel api eloquent

如何使用Eloquent在Laravel 6中访问此数组对象?

        [line_items] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 4088662196333
                        [variant_id] => 29653605285997
$external = DB::table('orders')->pluck('import_order_data');
...
foreach ($external as $key => $val) {
...
Cart::updateOrCreate([
   'line_item_id' => ['line_item_id' => $val['id']],
],
  

ErrorException
  非法字符串偏移量'id'

如果我将其更改为:

'line_item_id' => ['line_item_id' => $val->id],

我收到错误消息:

  

ErrorException
  试图获取非对象的属性“ id”

如果我将其更改为:

'line_item_id' => ['line_item_id' => $val['line_items']->id],

我收到错误消息:

  

非法字符串偏移'line_items'

编辑: 问题是:

    protected $casts = [
        'import_order_data' => 'array',
    ];

现在我可以像这样访问它:

   dd($val['line_items'][0]['id']);

其中提供:

4092309209197

dd($val['line_items']);

其中提供:

array:1 [▼
  0 => array:26 [▼
    "id" => 4092309209197
    "sku" => "1605"
    "name" => "Printer Ink"

在访问数据方面有更好的选择吗?

编辑: 答案:

foreach ($val['line_items'] as $index => $lineItem) {
    dd($lineItem['id']);

其中提供:

4092309209197

这是一种合理的方法吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则您的数组如下所示:

$arr = [
           [
               "id" => 4092309209197,
               "sku" => "1605",
               "name" => "Printer Ink",
                ....etc.....
           ]
];

好。首先,由于外部数组只有一项,因此您可以执行以下操作:

$innerArr = $arr[0];

现在您已经拥有了:

$innerArr = [
    "id" => 4092309209197,
    "sku" => "1605",
    "name" => "Printer Ink",
    ....etc.....
]

您可以这样访问它:

echo $innerArr["id"];
echo $innerArr["sku"];
....etc....

或者这样:

foreach($innerArr as $key => $val){
    echo $key.": ".$val."\r\n";
}