【问题标题】:PHP Why is only one array returned in multidimensional array after a foreachPHP为什么在foreach之后在多维数组中只返回一个数组
【发布时间】:2020-01-20 23:44:10
【问题描述】:

所以我试图制作一个多维数组,在他们的日期下插入日期。但是,这些日期仅显示来自数据库的日期之一。它看起来也像是在重演。最终,我的目标是让所有日期都在他们尊敬的日子里。

我尝试了什么:
-array_push,尝试将新数据推送到数组中。
-A for循环

处理代码

$currentDate = new Date();

        $month = $currentDate->getCurrentDate()->format("m");
        $year = $currentDate->getCurrentDate()->format("Y");

        $availableCollection = new AvailabilitiesCollection();


        try {
            $availableCollection->add(Availability::getByMonthAndYear($this->db, $month, $year));
            $availabilities = $availableCollection->get();
            foreach ($availabilities as $this->availability ){
                $this->date = new \DateTime($this->availability['date']);
                $this->dayLabel = $this->date->format('D');
                $this->dataDb[] = $this->dayLabel;
            }

            $count = array_count_values($this->dataDb);


            foreach ($availabilities as $this->availability) {
                $this->date = new \DateTime($this->availability['date']);
                $this->dayLabel = $this->date->format('D');

                $this->insertAvailabilityInDays[$this->dayLabel] = array();

                $availableData = array(
                        'id' => $this->availability['reservation_id'],
                        'date' => $this->availability['date'],
                        'start_at' => $this->availability['start_at'],
                        'end_at' => $this->availability['end_at']
                    );

                array_push($this->insertAvailabilityInDays[$this->dayLabel], $availableData);

//                for($i = 0; $i < $count[$this->dayLabel]; $i++){
//                    $availableData = array(
//                        'id' => $this->availability['reservation_id'],
//                        'date' => $this->availability['date'],
//                        'start_at' => $this->availability['start_at'],
//                        'end_at' => $this->availability['end_at']
//                    );
//
//                    array_push($this->insertAvailabilityInDays[$this->dayLabel], $availableData);
//                }

                var_dump($this->insertAvailabilityInDays);
                continue;




            }


//            var_dump($this->insertAvailabilityInDays);
//            exit;


        } catch (\Exception $e) {
            $this->logger->error($e);
        }

我的数据库中的数据:

+----------------+------------+----------+--------+
| reservation_id |    date    | start_at | end_at |
+----------------+------------+----------+--------+
|              6 | 2020-01-22 |  12:30   | 12:45  |
|              7 | 2020-01-20 |  12:50   | 13:00  |
|              8 | 2020-01-22 |  15:45   | 16:00  |
|              9 | 2020-01-21 |  14:45   | 15:00  |
+----------------+------------+----------+--------+

我目前的输出:

array (size=1)
  'Wed' => 
    array (size=4)
      'id' => string '6' (length=1)
      'date' => string '2020-01-22' (length=10)
      'start_at' => string '12:30:00' (length=8)
      'end_at' => string '12:45:00' (length=8)
/var/source/app/classes/System/Handlers/CalendarHandler.php:87:
array (size=2)
  'Wed' => 
    array (size=4)
      'id' => string '6' (length=1)
      'date' => string '2020-01-22' (length=10)
      'start_at' => string '12:30:00' (length=8)
      'end_at' => string '12:45:00' (length=8)
  'Mon' => 
    array (size=4)
      'id' => string '7' (length=1)
      'date' => string '2020-01-20' (length=10)
      'start_at' => string '12:50:00' (length=8)
      'end_at' => string '13:00:00' (length=8)
/var/source/app/classes/System/Handlers/CalendarHandler.php:87:
array (size=2)
  'Wed' => 
    array (size=4)
      'id' => string '8' (length=1)
      'date' => string '2020-01-22' (length=10)
      'start_at' => string '15:45:00' (length=8)
      'end_at' => string '16:00:00' (length=8)
  'Mon' => 
    array (size=4)
      'id' => string '7' (length=1)
      'date' => string '2020-01-20' (length=10)
      'start_at' => string '12:50:00' (length=8)
      'end_at' => string '13:00:00' (length=8)
/var/source/app/classes/System/Handlers/CalendarHandler.php:87:
array (size=3)
  'Wed' => 
    array (size=4)
      'id' => string '8' (length=1)
      'date' => string '2020-01-22' (length=10)
      'start_at' => string '15:45:00' (length=8)
      'end_at' => string '16:00:00' (length=8)
  'Mon' => 
    array (size=4)
      'id' => string '7' (length=1)
      'date' => string '2020-01-20' (length=10)
      'start_at' => string '12:50:00' (length=8)
      'end_at' => string '13:00:00' (length=8)
  'Tue' => 
    array (size=4)
      'id' => string '9' (length=1)
      'date' => string '2020-01-21' (length=10)
      'start_at' => string '14:45:00' (length=8)
      'end_at' => string '15:00:00' (length=8)

我希望每个日期都与他们的日子一起出现在数组中。连同其数据库信息。

例如:

'Wed' => 
    array (size=4)
    0 =>
      'id' => string '6' (length=1)
      'date' => string '2020-01-22' (length=10)
      'start_at' => string '12:30:00' (length=8)
      'end_at' => string '16:45:00' (length=8)
    1 =>
      'id' => string '8' (length=1)
      'date' => string '2020-01-22' (length=10)
      'start_at' => string '15:45:00' (length=8)
      'end_at' => string '16:00:00' (length=8)

【问题讨论】:

  • 不确定这是否正确,您的代码难以破译。看起来你有很多可能会混淆事物的道具。试试:$this->insertAvailabilityInDays[$this->dayLabel][] = $availableData
  • @TomShaw 我正要回复说我已经尝试过了,但它确实有效。我不知道为什么它现在这样做了。对不起,如果我解释得不好,究竟有什么困难我可以改变它?
  • 除非绝对必要,否则我倾向于避免使用属性并使用函数参数。我已经和一位同事就这个问题发生了争执,当然你可以创建大量的道具,但更多的是为了简化事情和提高可读性。
  • 当然,我的意思是我们都应该这样做。我是一名学生,还在学习很多东西。你能告诉我你会避免或改变什么,以便我下次应用。
  • 我的建议是保持简单,代码格式和变量名都经过深思熟虑。原因是代码库变得越来越复杂。我有一个客户,现在 10 年后你应该会看到他的代码库。除此之外,我非常高兴它的工作! :)

标签: database oop for-loop foreach php-7.2


【解决方案1】:

就像@TomShaw 提到的,确实改变$this-&gt;insertAvailabilityInDays[$this-&gt;dayLabel][] = $availableData 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2019-07-21
    • 2020-07-07
    • 2021-09-20
    相关资源
    最近更新 更多