如何通过url传递多维数组作为查询参数?并在 laravel 6.0 中访问这些参数

How to pass multi-dimensional arrays through url as query parameters? and access these parameters in laravel 6.0

我试图在下面的 URL:

中传递一个多维数组作为查询参数
{{serverURL}}/api/v1/classes?with[]=section.courseteacher&addl_slug_params[0][0]=test&addl_slug_params[0][1]=test1&addl_slug_params[0][2]=test0

以上有什么问题URL?

我在 Laravel 6.0 中访问这些参数的代码如下:

        $addl_slug_params = $request->query('addl_slug_params');
        $i=0;
        foreach ($addl_slug_params as $s) {
            $j=0;
            foreach($s as $asp) {
                print_r('addl_slug_params : ('.$i.':'.$j.') : '.$asp); die(); 
                $j=$j+1;
            }
            $i = $i+1;
        }

结果:

addl_slug_params : (0:0) : test

Problem: test1 and test0 are not accessible..

我该怎么办?

问题是 printr() 之后的 die();,循环将 运行 一次,也就是仅 addl_slug_params : (0:0) : test

为了帮助您更好地想象它,我在每个循环后添加了一个额外的中断:

foreach ($addl_slug_params as $s) {
        $j=0;
        foreach($s as $asp) {
            echo('addl_slug_params : ('.$i.':'.$j.') : '.$asp);
            echo nl2br(PHP_EOL);
            $j=$j+1;
        }
        $i = $i+1;
    }

将产生以下结果:

addl_slug_params : (0:0) : test
addl_slug_params : (0:1) : test1
addl_slug_params : (0:2) : test0

这是多维数组的解决方案。在 2 ~ 小时内开发,肯定需要改进,但希望能帮助你:)

Route::get('example', function (\Illuminate\Http\Request $request) {

    $addl_slug_params = [
        [
            1 => [
                'title' => 'Test 1',
                'slug'  => 'test1'
            ],
            2 => [
                'title' => 'Test 2',
                'slug'  => 'test2'
            ],
            3 => [
                'title' => 'Test 3',
                'slug'  => 'test3'
            ],
        ],
    ];

    // Encode
    $prepend = 'addl_slug_params';
    $query = "?$prepend";
    $tempSlugs = $addl_slug_params[0];
    $lastIndex = count($tempSlugs);
    foreach ($addl_slug_params as $pIndex => $params) {
        foreach ($params as $sIndex => $slugData) {

            $tempQuery = [];
            foreach ($slugData as $sdIndex => $data) {
                // Replace '-' or '   -' with ''
                $encodedString = preg_replace('#[ -]+#', '-', $data);
                // title = test1
                $tempString = "$sdIndex=$encodedString";
                $tempQuery[] = $tempString;
            }

            $dataQuery = implode(',', $tempQuery);
            $appendStr = ($sIndex !== $lastIndex) ? "&$prepend" : '';
            // Set the multidimensional structure here
            $query .= "[$pIndex][$sIndex]=[$dataQuery]$appendStr";
        }
    }

    // DECODE
    // ?addl_slug_params[0][1]=[title=Test-1,slug=test1]&addl_slug_params[0][2]=[title=Test-2,slug=test2]&addl_slug_params[0][3]=[title=Test-3,slug=test3]
    $slugParams = $request->query('addl_slug_params');
    $slugParamData = [];
    foreach ($slugParams as $slugItems) {
        foreach ($slugItems as $slugItem) {
            // Replace [title=test,slug=test1] into 'title=test,slug=test1' and explode
            // into into an array, and split title=test into [title => test]
            $splitArray = explode(',', (str_replace(array('[', ']'), '', $slugItem)));
            $slugItemData = [];
            foreach ($splitArray as $value) {
                $data = explode('=', $value);
                $slugItemData[$data[0]] = $data[1];
            }
            $slugParamData[] = $slugItemData;
        }
    }

    dd($slugParamData);
});

我已经使用关联数组解决了这个问题,因为它提供了更大的灵活性,而 Garrett 的解决方案绝对有帮助

new url: {{serverURL}}/api/v1/classes?with[]=section.courseteacher&addl[users][params]=name laravel代码: ` foreach ($addl_data_array as $addl_slug => $addl_slug_data) {

        foreach ($addl_slug_data as $key => $value) {
            $params = null;
            $where_raw = null;
            $where_has = null;
            $with_relationships = null;
            $with_timestamps = null;    

} } `