【问题标题】:running a foreach loop through a multidimensional array通过多维数组运行 foreach 循环
【发布时间】:2014-01-18 19:57:59
【问题描述】:

嗨,我对 PHP 还是很陌生,我想将三个不同的东西保存在一个数组中,我将在我的数据库中提取它们。现在我只需要设置阵列的帮助。对于数据库的每一行,我要排序 3 件事,一年中的第几周(比如 43),我那周的工作时间(比如 29)和年份(比如 2013 年)。所以只是为了设置数组,我放了一堆假数据,如下所示:

$hours = array(
    "week" => array(1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51), 
    "hours" => array(65,56,34,76,87,43,23,43,53,23,65,34,23,54,65,75,34,23,34,54,34,54,65,34,23,76),
     "year" => array(2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013, 2014,2014,2014,2014,2014)
);

我的第一个问题是:我的阵列是否针对我试图描述的内容正确设置。 我的第二个问题:如果设置正确,我如何运行 foreach 循环,以便访问所有三个变量:一年中的星期、小时和年份?

【问题讨论】:

    标签: php arrays multidimensional-array foreach


    【解决方案1】:

    在我看来,您需要它的方式有所不同。

    数据库中应该有一些表,有一个列:id、week、hours 和year。

    所以在 php 中相当于:

    $result = [
      ['id' => 1, 'week' => 1,  'hours' => 40, 'year' => 2014],
      ['id' => 2, 'week' => 3,  'hours' => 53, 'year' => 2014],
      ['id' => 3, 'week' => 14, 'hours' => 32, 'year' => 2014],
    ];
    

    然后你可以使用foreach来查找某一行:

    $target = 3; # assume target week we trying to search is 3
    
    $row_found = null;   
    
    foreach($result as $row) {
      if($row['week'] == $target) {
        $row_found = $row;
    
        break;
      }
    }
    

    与您的示例一样,如果您的数组由于某种原因大小不同,它将中断。

    此外,您可以按周重新索引您的数组:

    $result = [ # that's result from mysql
      ['id' => 1, 'week' => 1,  'hours' => 40, 'year' => 2014],
      ['id' => 2, 'week' => 3,  'hours' => 53, 'year' => 2014],
      ['id' => 3, 'week' => 14, 'hours' => 32, 'year' => 2014],
    ];
    
    $result_indexed = [];
    
    foreach($result as $row) {
      $result_indexed[$row['week']] = $row;
    }
    

    然后可以通过$result_indexed[3] 轻松访问某一周,例如第 3 周

    【讨论】:

    • 我不想通过我从数据库中获得的内容运行 foreach 循环我想先添加几周,比如第 1 周 +2 一起,然后是 3+4 等等,所以我想做的是有一个 if 语句检查周数是否可以使用模数除以 2,如果是,则表示它是偶数周,所以将那一周标识为前一周,然后放入两周(比如说它是 1和 2) 在新数组中为 1,小时数(比如 12+13)在新数组中为 25 小时
    • 两者的年份相同,所以假设是 2013 年,所以数组将包含周 =>1 小时 => 25 和年 => 2013 你明白我的意思吗?跨度>
    • @user2989367 不完全是,真的,这没有任何意义。你能说一下你长期努力实现的目标吗?
    • 好吧,我有一个日历,其中包含工作日作为事件,每个工作日都有我工作的时间、一年中的一周和一年。我想计算我的薪水,我每两周领一次工资,所以我想将第 1 周和第 2 周、第 3 周和第 4 周的小时数相加......一直到 51 和 52。
    • @user2989367 你想获得所有周对的小时数,对吧?
    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 2015-06-02
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2011-08-30
    相关资源
    最近更新 更多