【问题标题】:php: How to foreach a multidimensional array?php:如何foreach一个多维数组?
【发布时间】:2018-10-01 15:42:41
【问题描述】:

我已经尝试了一段时间,但我似乎无法遍历多维数组。

我有这个数组:

$Work["work_time"] = array();
$Work["break_time"] = array();
$Work["meeting_time"] = array();
$Work["login_time"] = array();
$Work["logout_time"] = array();
$Work["work_date"] = array();

哪个 print_r($Work) 输出这个

Array
(
    [work_time] => Array
        (
            [0] => 0.00
            [1] => 3.96
            [2] => 7.75
        )

    [break_time] => Array
        (
            [0] => 0.00
            [1] => 0.00
            [2] => 1.06
        )

    [meeting_time] => Array
        (
            [0] => 0.00
            [1] => 0.00
            [2] => 0.00
        )

    [login_time] => Array
        (
            [0] => 10:11
            [1] => 08:48
            [2] => 09:09
        )

    [logout_time] => Array
        (
            [0] => 00:00
            [1] => 13:00
            [2] => 17:59
        )

    [work_date] => Array
        (
            [0] => 2018-04-13
            [1] => 2018-04-16
            [2] => 2018-04-17
        )
)

然后我尝试使用 foreach 循环遍历它并获取值,但它没有返回任何内容..

foreach ($Work as $row) {
 echo $row["login_time"];
}

我错过了什么?

【问题讨论】:

  • 这个数组是从哪里来的?它是从 HTML 表单输入的吗?
  • 不是重复的
  • @CharisMoutafidis 它可能与 something 重复,但我同意它与排序无关。

标签: php arrays loops


【解决方案1】:

您尝试使用 foreach 循环迭代的数组与您拥有的数组不同。为了使用该循环,您的数组需要改为:

[
    [
        'work_time' => 0.00,
        'break_time' => 0.00,
        'meeting_time' => 0.00,
        'login_time' => '10:11',
        'logout_time' => '00:00',
        'work_date' => '2018-04-13'
    ],
    [
        'work_time' => 3.96,
        'break_time' => 0.00,
        'meeting_time' => 0.00,
        'login_time' => '08:48',
        'logout_time' => '13:00',
        'work_date' => '2018-04-16'
    ],
    [
        'work_time' => 7.75,
        'break_time' => 1.06,
        'meeting_time' => 0.00,
        'login_time' => '09:09',
        'logout_time' => '17:59',
        'work_date' => '2018-04-17'
    ],
];

如果您有一个包含多行输入的 HTML 表单,那么您拥有的数组看起来就像您获得的输入类型:

<input type="text" name="work[work_time][]">

如果是这种情况,您可以通过切换键并为每一行指定一个数字键来获得像我上面展示的那样的数组:

<input type="text" name="work[0][work_time]">

然后将数据作为行访问会更有意义。如果不是这样,好吧,没关系。 :)


另一方面,使用您拥有的数组,您可以直接迭代其中一个内部数组。例如,如果你想显示 login_time 值,它只是

foreach ($Work['login_time'] as $login_time) {
    echo $login_time;
}

如果您需要从其他内部数组中获取相应的值,您也可以使用正在迭代的数组中的键来访问这些值:

foreach ($Work['login_time'] as $key => $login_time) {
    echo 'login time: ' . $login_time . ', work_date: ' . $Work['work_date'][$key];
}

【讨论】:

    【解决方案2】:

    如果您已经知道所需的密钥 (login_time),则无需迭代数组。您可以通过$Work["login_time"] 直接访问它。

    如果要迭代$Work["login_time"],可以使用foreach

    foreach ($Work['login_time'] as $row) {
       echo $row;
    }
    

    【讨论】:

      【解决方案3】:

      如果你真的不知道你正在处理多少个维度,那么你需要一个递归解决方案。 这是我的代码:

      $Work["work_time"] = array(1, 2, 3);
      $Work["break_time"] = array(4, 5, 6);
      $Work["meeting_time"] = array(7, 8, 9);
      $Work["login_time"] = array(10, 11, 12);
      $Work["logout_time"] = array(13, 14, 15);
      $Work["work_date"] = array(16, 17, 18);
      
      function forLoop($array){
          foreach ($array as $row) {
              if(is_array($row)){
                  forLoop($row);
              }
              else{
                  echo $row;
                  echo " ";
              }
          }
      }
      
      forLoop($Work);
      

      输出:

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
      

      您实际上需要进行格式化或其他操作以使其按您希望的方式工作。 编辑: forLoop 函数调用它自己,所以它可以在任何维度数组上工作。告诉我你的想法!

      【讨论】:

        【解决方案4】:
        foreach ($dataArray as $innerArray){
           foreach ($innerArray as $key=>$value){
           // here is where you access the array -- $value
           }
        }
        

        【讨论】:

          【解决方案5】:

          要完全循环,您需要在第一个 foreach 中添加第二个 foreach。像这样:

           foreach ($Work as $row) {
            foreach ($row as $key => $value) {
            echo "$key - $value";
           }
          }
          

          【讨论】:

            【解决方案6】:

            可能需要多个 for 循环

            foreach ($Work as $row) {
               foreach($row as $key => $rs) {
                   echo $rs;
              }
            }
            

            【讨论】:

              猜你喜欢
              • 2017-10-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-08-13
              • 1970-01-01
              • 2012-05-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多