Laravel 根据 json 的范围获取属性值

Posted

技术标签:

【中文标题】Laravel 根据 json 的范围获取属性值【英文标题】:Laravel get attribute value based on range from json 【发布时间】:2019-03-12 09:54:03 【问题描述】:

以下是在 Laravel 框架中编码的:

查询

$shipping = DB::table('shipping')->where('country',$delivery->country)->first();
$data= json_decode(json_encode($shipping),true);

结果

array (
  'id' => 3,
  'carrier' => 'EN',
  'country' => 'AU',
  'rates_json' => '"rates": ["international": ["zone4": ["to_kg": "2", "total": "1", "from_kg": "1", "to_kg": "4", "total": "2", "from_kg": "3"]]]',
)  

mysql 数据库中,我将“rates_json”存储在“JSON”数据类型列中。属性“from_kg”和“to_kg”是一个范围。

如果值在范围之间,我打算检索总数。例如,如果值 1.5 介于 1 和 2 之间,则总数为 1。

感谢您的帮助。

谢谢。

【问题讨论】:

不要使用编码的解码。你有 toArray 功能。检查this 答案并在第一个语句中使用另一个 where 闭包。 【参考方案1】:

由于您的问题不清楚, 我只能给你一个提示,你能做什么。

foreach (json_decode($data['rates_json'])->rates as $rates) 
    foreach ($rates->international as $international) 
        foreach ($international->zone4 as $zone) 
            if ($zone->from_kg <= $zone->total &&  $zone->total <= $zone->to_kg) 
            
                // do whatever you want here.
                dump($zone->total);
            
        
    

如有任何调整,请告诉我。

【讨论】:

是的。这是我正在寻求的解决方案,我正在调整。 我将“$zone->total”替换为“$weight”,其中“$weight”是我提供的值。现在我想弄清楚,假设一个包裹的最大重量限制是 30 公斤,但我的包裹超过 30 公斤,那么我该如何计算剩余公斤的值,然后将它们相加。

以上是关于Laravel 根据 json 的范围获取属性值的主要内容,如果未能解决你的问题,请参考以下文章

json中怎么取出对象的属性值啊?

json中怎么取出对象的属性值啊?

如何使用熊猫根据列的值范围分离数据框?

java 反射机制--根据属性名获取属性值

从laravel控制器返回json时尝试获取非对象的属性“id”

如何从 Laravel5 中的 json 类型响应中获取值