如何在Laravel中使用方括号而不是大括号打印数组?

问题描述

我的laravel控制器中有这段代码,它打印出如下数组:items是一个集合。

$i = [];
foreach($items as $item) {
    $i['grid'][$item->color]['color'] = $item->color;
    $item_list['grid'][$item->color]['size_grid'][$item->size_no] = [
                    'size_no' => $item->size_no,'size_description' => $item->size_desc,'on_hand' => $item->on_hand,];
}

输出

"grid": {
          "VELBL": {
            "color": "VELBL","size_grid": {
              "3": {
                "size_no": 3,"size_description": "MEDIUM","on_hand": "0"
              },"5": {
                "size_no": 5,"size_description": "X LARGE","4": {
                "size_no": 4,"size_description": "LARGE","1": {
                "size_no": 1,"size_description": "X SMALL","2": {
                "size_no": 2,"size_description": "SMALL","on_hand": "0"
              }
            }
          },"BLUAS": {
            "color": "BLUAS","MHGR": {
            "color": "MHGR","size_grid": {
              "1": {
                "size_no": 1,"3": {
                "size_no": 3,"on_hand": "0"
              }
            }
          }
        }

这将使用大括号打印结果,但是我需要使用方括号将其打印出来。我该如何实现?如果更改代码,则不会打印所有必要的数据,如何打印带有方括号的同一组数据,如下所示:

预期输出

"grid": [
          "VELBL": {
            "color": "VELBL","size_grid": [
              "3": {
                "size_no": 3,"on_hand": "0"
              }
            ]
          },"size_grid": [
              "1": {
                "size_no": 1,"on_hand": "0"
              }
            ]
          }
        ]

请有人帮助我,这是该技术的新手。预先感谢。

更新: 通过添加此行代码,现在这将打印带有方括号的网格​​数组,但是其中的数组size_grid而不是方括号,我该如何也将带有方括号的size_grid数组打印出来?

$item_list['grid'] = array_values($item_list['grid']);

输出

"grid": [
          {
            "color": "VELBL",{
            "color": "BLUAS",{
            "color": "MHGR","on_hand": "0"
              }
            }
          }
        ]

解决方法

要在网格中获得方括号中的结果,简单的解决方案应如下所示:

// your existing code
$i = [];
foreach($items as $item) {
    $i['grid'][$item->color]['color'] = $item->color;
    $item_list['grid'][$item->color]['size_grid'][$item->size_no] = [
                    'size_no' => $item->size_no,'size_description' => $item->size_desc,'on_hand' => $item->on_hand,];
}

// https://www.php.net/array_values
$item_list['grid'] = array_values($item_list['grid']);

更新:如果您还希望size_grid也是数字,则可以执行以下操作:

// your existing code
foreach($items as $item) {
    ...
    // this line is updated,removal of "$item->size_no"
    $item_list['grid'][$item->color]['size_grid'][] = [
                    'size_no' => $item->size_no,];
}

// https://www.php.net/array_values
$item_list['grid'] = array_values($item_list['grid']);

OR

...

// https://www.php.net/array_values
$item_list['grid'] = array_values($item_list['grid']);

$item_list['grid'] = array_map(
  function ($item) { 
    $item['size_grid'] = array_values($item['size_grid']);
    return $item;
  },$item_list['grid']
);