Многомерный массив для() с различными уровнями нумерованных элементов

Как бы я написал цикл foreach, который бы распечатывал всю информацию со следующим многомерным массивом без использования каких-либо функций:

$workers = array(
    "Natalie" => array
        ("First term" => array(
              "Subworker" => "Susan", 
               "Length" => '1900-2000', 
                "Notes" => "Finished all tasks"),                     
      "Second term" => array(
               "Subworker" => "Laura", 
             "Length" => '1985-1986'), 
           ),               
      "Laura" => array(
            "First term" => array(
                  "Subworker" => "Sarah", 
                  "Length" => '1999-1992'),                     
             ),               
        "Carolyn" => array(
             "First term" => array(
                  "Subworker" => "Jenny", 
                  "Length" => '1900 -1945', 
                  "Notes" => array
                         ("Finished all tasks", 
                           "Did not finish all tasks",                           
                           "Completed partial tasks" )
                  ),                    
                  ),               
        "Jacob" => array(
            "First term" => array(
                "Subworker" => "Danielle", 
                "Length" => '1993-1994', 
                "Notes" => "Finished all tasks"),                       
                ),   
        "Jenny" => array(
           "First term" => array(
                "Subworker" => "Angela", 
                "Length" => '1999 - 2001'),                      
           "Second term" =>        array(
              "Subworker" => array(
                    "Paula" => "Let Go", 
                    "Steve" => "Hired"), 
              "Length" => '1987 - 1999', 
              "Notes" => "Hired"),                              
            )              
        );

/ * * * * До сих пор я делал следующее, Но это не распечатка всего. Например, он не печатается под Дженни, второй срок, подчиненный пола и Стив./*****

foreach($workers as $worker => $value) {
    foreach ($value as $newkey => $info) {
         echo $worker.':<br>'.$newkey.':<br>';
             foreach ($value as $newkey) {
                 echo 'Subworker: '.$newkey["Subkey"].'<BR>';
                     foreach ($value as $newkey) {
                         echo 'Length: '.$newkey["Length"].'<BR>';
                            foreach ($value as $newkey) {
                            echo 'Notes: '.$newkey["Notes"].'<BR>';             
               }
           }
        }
      }
   }

2 ответа

  1. Необходимо пересечь функцию и сделать небольшие тесты вверх по течению, всегда полезно избежать возврата ошибки в среде dev. 🙂

    Я должен добавить списки (ul, li) для лучшего чтения

    if (is_array($workers) && !empty($workers)) {
        echo loopArray($workers);
    } else {
        echo "<ul><li>".$workers."</li></ul>";
    }
    
    function loopArray($array)
    {
        $result = "";
        $result .= "<ul>";
        foreach ($array as $item => $value) {
            if (is_array($value) && !empty($value)) {
                $result .= "<li>".$item;
                $result .= loopArray($value)."</li>";
            } else {
                $result .= "<ul><li>".$item.': '.$value."</li></ul>";
            }
        }
        $result .= "</ul>";
    
        return $result;
    }
    
  2. Печать указанного массива без использования функций:

    // workers
    foreach($workers as $worker => $workerarr) {
      echo $worker.":<ul>\n";
    
      // worker terms
      foreach ($workerarr as $term => $terminfo) {
        echo "<li>$term:<ul>\n";
    
        // term info
        foreach ($terminfo as $type => $typevalue) {
          echo "<li>$type: ";
    
          // is type value an array?
          if ( is_array($typevalue) ) {
    
            // if so, put in list
            echo "<ul>\n";
            foreach ($typevalue as $label => $value) {
              $label = is_int($label)? '': "$label: "; // only print text
              echo "<li>$label$value</li>\n";
            }
            echo "</ul>";
          }
    
          // if not...
          else {
            echo $typevalue;
          }
    
          echo "</li>\n";
        }
        echo "</ul></li>\n";
      }
      echo "</ul>";
    }
    

    Использование неупорядоченных списков для отображения информации в удобочитаемом виде. Чтобы просмотреть только теги break, как в вопросе, см. раздел PHP Sandbox-Original

    PHP Sandbox-неупорядоченные списки