Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何构建对象/数组?_Php_Laravel_Eloquent - Fatal编程技术网

Php 如何构建对象/数组?

Php 如何构建对象/数组?,php,laravel,eloquent,Php,Laravel,Eloquent,我对PHP相当陌生,所以我不知道如何使用这些数据集。我做了一个MySQL选择,然后得到一个如下的对象: { "membername": "NAME", "bookingdate": "2020-02-03", "categoryid": 1, "dailyworkhourssum": "7.70" }, { "membernam

我对PHP相当陌生,所以我不知道如何使用这些数据集。我做了一个MySQL选择,然后得到一个如下的对象:

{
  "membername": "NAME",
  "bookingdate": "2020-02-03",
  "categoryid": 1,
  "dailyworkhourssum": "7.70"
},
{
  "membername": "NAME",
  "bookingdate": "2020-02-03",
  "categoryid": 3,
  "dailyworkhourssum": "1.2"
},
{
  "membername": "NAME",
  "bookingdate": "2020-02-05",
  "categoryid": 3,
  "dailyworkhourssum": "7.70"
},
{
      "membername": "NAME",
      "bookingdate": "2020-02-03",
      "categoryid1": true,
      "categorid3": true,
      "dailyworkhourssum1": "7.70",
      "dailyworkhourssum3": "1.2"
    },
    {
      "membername": "NAME",
      "bookingdate": "2020-02-05",
      "categoryid": 3,
      "dailyworkhourssum": "7.70"
    },
    $books = [
     [
       "membername" => "NAME",
       "bookingdate" => "2020-02-03",
       "categoryid" => 1,
       "dailyworkhourssum" => "7.70"
     ],
     [
       "membername" => "NAME",
       "bookingdate" => "2020-02-03",
       "categoryid" => 3,
       "dailyworkhourssum" => "1.2"
     ],
     [
       "membername" => "NAME",
       "bookingdate" => "2020-02-05",
       "categoryid" => 3,
       "dailyworkhourssum" => "7.70"
     ]
   ];
$merged = [];
foreach ($books as $book) {
    $date = $book['bookingdate'];
    if (isset($merged[$date])) {
        $merged[$date] = $merged[$date] + $book;
    } else {
        $merged[$date] = $book;
    }
}
我想重复一下,最后应该是这样的:

{
  "membername": "NAME",
  "bookingdate": "2020-02-03",
  "categoryid": 1,
  "dailyworkhourssum": "7.70"
},
{
  "membername": "NAME",
  "bookingdate": "2020-02-03",
  "categoryid": 3,
  "dailyworkhourssum": "1.2"
},
{
  "membername": "NAME",
  "bookingdate": "2020-02-05",
  "categoryid": 3,
  "dailyworkhourssum": "7.70"
},
{
      "membername": "NAME",
      "bookingdate": "2020-02-03",
      "categoryid1": true,
      "categorid3": true,
      "dailyworkhourssum1": "7.70",
      "dailyworkhourssum3": "1.2"
    },
    {
      "membername": "NAME",
      "bookingdate": "2020-02-05",
      "categoryid": 3,
      "dailyworkhourssum": "7.70"
    },
    $books = [
     [
       "membername" => "NAME",
       "bookingdate" => "2020-02-03",
       "categoryid" => 1,
       "dailyworkhourssum" => "7.70"
     ],
     [
       "membername" => "NAME",
       "bookingdate" => "2020-02-03",
       "categoryid" => 3,
       "dailyworkhourssum" => "1.2"
     ],
     [
       "membername" => "NAME",
       "bookingdate" => "2020-02-05",
       "categoryid" => 3,
       "dailyworkhourssum" => "7.70"
     ]
   ];
$merged = [];
foreach ($books as $book) {
    $date = $book['bookingdate'];
    if (isset($merged[$date])) {
        $merged[$date] = $merged[$date] + $book;
    } else {
        $merged[$date] = $book;
    }
}
这样做的目的是将两个字段合并在一起(如果它们具有相同的
bookingdate
),这样我就可以在表中显示它,而不会重复日期。 我的问题是:

  • 我不知道这类数据叫什么
  • 我不知道如何创造这样的东西

  • 我可以使用
    $data->newField=example
    向此类数据添加字段,因此我认为这是一个对象。

    在JS中称为对象,但在PHP中,您将使用关联数组。 在你的例子中,我认为,你有一个关联数组。看起来是这样的:

    {
      "membername": "NAME",
      "bookingdate": "2020-02-03",
      "categoryid": 1,
      "dailyworkhourssum": "7.70"
    },
    {
      "membername": "NAME",
      "bookingdate": "2020-02-03",
      "categoryid": 3,
      "dailyworkhourssum": "1.2"
    },
    {
      "membername": "NAME",
      "bookingdate": "2020-02-05",
      "categoryid": 3,
      "dailyworkhourssum": "7.70"
    },
    
    {
          "membername": "NAME",
          "bookingdate": "2020-02-03",
          "categoryid1": true,
          "categorid3": true,
          "dailyworkhourssum1": "7.70",
          "dailyworkhourssum3": "1.2"
        },
        {
          "membername": "NAME",
          "bookingdate": "2020-02-05",
          "categoryid": 3,
          "dailyworkhourssum": "7.70"
        },
    
        $books = [
         [
           "membername" => "NAME",
           "bookingdate" => "2020-02-03",
           "categoryid" => 1,
           "dailyworkhourssum" => "7.70"
         ],
         [
           "membername" => "NAME",
           "bookingdate" => "2020-02-03",
           "categoryid" => 3,
           "dailyworkhourssum" => "1.2"
         ],
         [
           "membername" => "NAME",
           "bookingdate" => "2020-02-05",
           "categoryid" => 3,
           "dailyworkhourssum" => "7.70"
         ]
       ];
    
    $merged = [];
    foreach ($books as $book) {
        $date = $book['bookingdate'];
        if (isset($merged[$date])) {
            $merged[$date] = $merged[$date] + $book;
        } else {
            $merged[$date] = $book;
        }
    }
    
    如果要合并具有相同“bookingdate”的数组,我建议您循环此数组,并将其元素添加到另一个具有bookingdate作为键的关联数组中,然后检查是否已经存在此类键,然后合并数组,如下所示:

    {
      "membername": "NAME",
      "bookingdate": "2020-02-03",
      "categoryid": 1,
      "dailyworkhourssum": "7.70"
    },
    {
      "membername": "NAME",
      "bookingdate": "2020-02-03",
      "categoryid": 3,
      "dailyworkhourssum": "1.2"
    },
    {
      "membername": "NAME",
      "bookingdate": "2020-02-05",
      "categoryid": 3,
      "dailyworkhourssum": "7.70"
    },
    
    {
          "membername": "NAME",
          "bookingdate": "2020-02-03",
          "categoryid1": true,
          "categorid3": true,
          "dailyworkhourssum1": "7.70",
          "dailyworkhourssum3": "1.2"
        },
        {
          "membername": "NAME",
          "bookingdate": "2020-02-05",
          "categoryid": 3,
          "dailyworkhourssum": "7.70"
        },
    
        $books = [
         [
           "membername" => "NAME",
           "bookingdate" => "2020-02-03",
           "categoryid" => 1,
           "dailyworkhourssum" => "7.70"
         ],
         [
           "membername" => "NAME",
           "bookingdate" => "2020-02-03",
           "categoryid" => 3,
           "dailyworkhourssum" => "1.2"
         ],
         [
           "membername" => "NAME",
           "bookingdate" => "2020-02-05",
           "categoryid" => 3,
           "dailyworkhourssum" => "7.70"
         ]
       ];
    
    $merged = [];
    foreach ($books as $book) {
        $date = $book['bookingdate'];
        if (isset($merged[$date])) {
            $merged[$date] = $merged[$date] + $book;
        } else {
            $merged[$date] = $book;
        }
    }
    
    我认为这不是一个有效的代码(没有时间,对不起),但我希望你能接受这个想法

    如果希望使用“列表”而不是关联数组,则可以执行以下操作:

     $mergedList = array_values($merged);
    

    因此,您将摆脱字符串键。

    如果我理解正确,您将获得一个具有4列和可变行数的表,并希望将其转换为具有可变列数的表。因此,使用一个数据结构,其中每个项目都不同于前一个项目,这会使一切变得比它需要的更困难。我建议您使用固定结构:

    // I'm assuming you have a PHP array as starting point
    $input = [
        [
            'membername' => 'NAME',
            'bookingdate' => '2020-02-03',
            'categoryid' => 1,
            'dailyworkhourssum' => '7.70',
        ],
        [
            'membername' => 'NAME',
            'bookingdate' => '2020-02-03',
            'categoryid' => 3,
            'dailyworkhourssum' => '1.2',
        ],
        [
           'membername' => 'NAME',
           'bookingdate' => '2020-02-05',
           'categoryid' => 3,
           'dailyworkhourssum' => '7.70',
        ],
    ];
    
    $output = [];
    foreach ($input as $data) {
        // We'll group by booking date
        if (!isset($output[$data['bookingdate']])) {
            $output[$data['bookingdate']] = [
                'membername' => $data['membername'],
                'bookingdate' => $data['bookingdate'],
                'categoryid' => $data['categoryid'],
                'dailyworkhourssum' => [],
            ];
        }
        // A single date may have several daily work hours
        $output[$data['bookingdate']]['dailyworkhourssum'][] = $data['dailyworkhourssum'];
    }
    
    // We discard array keys (we only needed them to group)
    echo json_encode(array_values($output));
    

    无论在何处使用此JSON,都只需循环
    dailyworkhourssum
    数组。在打印表格之前,您可能还希望循环整个结构,并保留一个计数器,以确定最大列数,以便在需要时绘制空单元格(表格为矩形)。

    您的最终目标是什么?您建议的数据结构将非常难以使用。SQL结果集基本上已经是表了,目标是将此结构返回到ajax调用,并将其显示在表中。每个日期只能打印一次,因此我必须将重复出现的日期合并在一起。通过select语句删除重复记录似乎更有意义。否则,您选择的内容超出了需要,只能将其删除。加倍努力。到目前为止你试过什么?你被困在哪里?