首页 > 解决方案 > 如何从 JSON 数组中读取值?

问题描述

在我的数据库中,我有 column items,在这个 coluln 中我有值:

[{"id":588,"user_id":1,"item_id":801,"created_at":"2020-12-16T11:55:40.000000Z","updated_at":"2020-12-16T11:55:40.000000Z","item":{"id":801,"market_hash_name":"Blackshield Protodrone Armor","image":"-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KW1Zwwo4NUX4oFJZEHLbXK9QlSPcUmoBVWSV6fSuGu387sW1JmKwFDiamtJBJs1_baPjBH79S3q4iEhfnxJ4TCnmRE5MF0mNbN9J7yjRrnrkNqNjr7IICSIFVsaVzYr1O4kOq915O16pyfm3Bi6SVzt3nYnUC0n1gSOXdKDzqL","exterior":"Mythical","rarity":"Mythical","color":"D2D2D2","is_stattrak":0,"price":1.3,"created_at":null,"updated_at":"2020-12-16T19:45:02.000000Z"}}]

我需要取值item_id,我试着让它像:

<td>{{ $bet->items[item_id] }}</td>

但我收到错误:使用未定义的常量 item_id - 假定为“item_id”(这将在 PHP 的未来版本中引发错误)

如果尝试:

<td>{{ $bet->items['item_id'] }}</td>

我收到:非法字符串偏移 'item_id'

或者如果尝试:

<td>{{ $bet->items["item_id"] }}</td>

我收到了同样的错误:非法字符串偏移 'item_id'

我在控制器的完整代码:

    $bets = Bet::query()->where('user_id', $user->id)->orderBy('id', 'asc')->get();
    foreach ($bets as $bet) {
        $profit += round($bet->win - $bet->bank, 2);
    }

在视图:

@foreach($bets as $bet)
    <tr>
        <td>#{{ $bet->id }}</td>
        <td>#{{ $bet->game_id }}</td>
        <td>{{ round($bet->bank, 2) }} $</td>
        <td>{{ round($bet->win, 2) }} $</td>
        <td>{{ round($bet->multiplier, 2) }}x</td>
        <td>{{ round($bet->auto_withdraw, 2) }}x</td>
        <td>{{ $bet->items["item_id"] }}</td>
        <td>{{ $bet->created_at }}</td>
    </tr>
@endforeach

我该如何解决?

标签: phplaravel

解决方案


你有两个选择。首先:将您的 json 转换为数组并像这样访问它:

$items_array = json_decode($bet->items,true);
$item_id = $items_array[0]['item_id'];

第二,或者你可以像对象一样做:

$items_object = json_decode($bet->items);
$item_id = $items_array[0]->item_id;


推荐阅读