首页 > 解决方案 > 如何以 JSON 格式转换两个数组值

问题描述

我的控制器

 public function showcart()
{

    $da = isset($_COOKIE["cart"]) ? $_COOKIE["cart"] : "[]";

    $data = json_decode($da);
    
    return view('customer.showcart', compact('data'));
}

刀:

<tbody>
                @foreach ($data as $dat)
                    <form action="{{ url('/addcart') }}" method="post">
                        @csrf
                        <tr>
                            <td>{{ $dat['id'] }}</td>
                            <td>{{ $dat['quantity']}}</td>
                        </tr>
                    </form>
                @endforeach

            </tbody>

电流输出

{"id":["8","8","8","9","9","8","8","8","10"],"quantity":["3","2","3","3","2","1","2","1","6"]}

我想将其转换为 JSON 中的每个索引,例如带有数量 [0] 的 id[0],带有数量 [1] 的 id[1]。

标签: phparraysjsonlaravelcookies

解决方案


如果您的目标是键/值对,那么请注意一个对象不能有重复的键,并且由于您的id值是 8、9 或 10(在示例中),输出不能有超过 3 个键:

{"8": 1, "9": 2, "10": 6}

无论如何,如果您的密钥在现实中确实是独一无二的,那么您需要array_combine

$arr = json_decode($da, true);
$data = array_combine($arr["id"], $arr["quantity"]);

请注意,您的分配$da需要不同的默认情况以使其兼容:

$da = isset($_COOKIE["cart"]) ? $_COOKIE["cart"] : '{"id":[],"quantity":[]}';

最后,您的循环应该以不同的方式提取键和值:

<form action="{{ url('/addcart') }}" method="post">
    @csrf 
    <table>
    @foreach ($data as $key => $value)
        <tr>
            <td>{{ $key }}</td>
            <td>{{ $value }}</td>
        </tr>
    @endforeach
    </table>
</form>

推荐阅读