【问题标题】:Display multidimensional array as unordered list using keys and values使用键和值将多维数组显示为无序列表
【发布时间】:2017-10-26 23:41:30
【问题描述】:

所以我有这样的数组。

[
    '0020098238 - Address 1' => [
        '20011045 - 1',
        '20011880 - 2',
        '20014727 - 3',
        '20015506 - 4'
    ],
    '0020011189 - Address 2' => [
        '20012490 - 11',
        '20018679 - 22',
        '20023569 - 33',
        '20028843 - 44'
    ],
    '0020102015 - Address 3' => [
        '20008315 - 55',
        '20008689 - 66',
        '20021267 - 77',
        '20032518 - 88'
    ]
]

现在,我想做 foreach 或 implode 或其他东西,结果得到这样的列表

  • 0020098238 - 地址 1
    • 20011045 - 1
    • 20011880 - 2
    • 20014727 - 3
    • 20015506 - 4
  • 0020011189 - 地址 2
    • 20012490 - 11
    • 20018679 - 22
    • 20023569 - 33
    • 20028843 - 44
  • 0020102015 - 地址 3
    • 20008315 - 55
    • 20008689 - 66
    • 20021267 - 77
    • 20032518 - 88

我尝试过使用 foreach($array as $key => $val) 而不是 implode $val 但它不起作用。我可以收集键,但数组中的值丢失。

谢谢

这是我尝试过的(嵌套 foreach)

foreach ($user_sap_data as $customer => $destinations) {
    echo '<ul>';
        echo '<li>' . $customer . '</li>';
        foreach ($destinations as $destination) {
            echo '<li>' . $destination . '</li>';
        }
    echo '</ul>';
}

但结果我只得到了第一个 foreach 的键(在嵌套的 foreach 中)

这不是像PHP nested array into HTML list 一样的问题,因为在其他问题中有 key => (key => val, key => val...) 但在这个例子中是 key => (val, val, val ) 等。其相似但不重复

【问题讨论】:

标签: php multidimensional-array foreach html-lists


【解决方案1】:

试试这个解决方案。在第二个 foreach 中,您必须将键作为值...

echo '<ul>';
foreach ($user_sap_data as $key => $value) {
 echo '<li>' . $key . '</li>';
 echo '<ul>';
  foreach ($value as $subkey => $subvalue) {
   echo '<li>' . $subkey . '</li>';
  }
 echo '</ul>';
}
echo '</ul>';

我认为内爆不起作用,但我没有尝试 :)

【讨论】:

    【解决方案2】:
    echo "<ul>";
    foreach($arr as $key=>$values){
        echo "<li>$key</li>"; //print array key
        echo "<ul>";
        foreach($values as $val){ 
             echo "<li>$val</li>"; // print subarray values
        }
        echo "</ul>";
    }
    echo "</ul>";
    

    您的代码 - 已更新:

        echo '<ul>';
        foreach ($user_sap_data as $customer => $destinations) {
              echo '<li>' . $customer . '</li>';
              echo '<ul>';
              foreach ($destinations as $destination) {
                echo '<li>' . $destination . '</li>';
              }
              echo '</ul>';
            }
            echo '</ul>';
    

    【讨论】:

    • 这是相同的结果,但我已经想通了,在第二次 foreach 中我必须 $key => $val 并取 $key....这就是问题...但是 thx
    【解决方案3】:

    您可以通过两个相互连接的 foreach 循环来实现这一点。 第一个循环将遍历父级元素,第二个循环将遍历其中的子级元素。

    <?php
    $array = array(
      '0020098238 - Address 1' => array(
        '20011045 - 1',
        '20011880 - 2',
        '20014727 - 3',
        '20015506 - 4'
      ),
      '0020011189 - Address 2' => array(
        '20012490 - 11',
        '20018679 - 22',
        '20023569 - 33',
        '20028843 - 44'
      ),
      '0020102015 - Address 3' => array(
        '20008315 - 55',
        '20008689 - 66',
        '20021267 - 77',
        '20032518 - 88'
      )
    );
    ?>
    <ul>
      <?php
      foreach ($array as $key => $val) {
        ?>
        <li>
          <?php echo $key; ?>
          <ul>
            <?php
            foreach ($val as $key_ch => $val_ch) {
              ?>
              <li>
                <?php echo $val_ch; ?>
              </li>  
              <?php
            }
            ?>
          </ul>
        </li>
        <?php
      }
      ?>
    </ul>
    

    【讨论】:

      【解决方案4】:

      既然你是用implode来接近的,你可以这样使用:

      echo "<ul>";
      foreach ($arr as $key => $value) {
          echo "<li>$key";
          echo "<ul><li>" . implode("</li><li>", $value) . "</li></ul></li>";
      }
      echo "</ul>";
      

      嵌套了两个foreach:

      echo "<ul>";
      foreach ($arr as $key => $value) {
          echo "<li>$key";
          echo "<ul>";
          foreach ($value as $subvalue) {
              echo "<li>$subvalue</li>";
          }
          echo "</ul></li>";
      }
      echo "</ul>";
      

      【讨论】:

        猜你喜欢
        • 2020-03-19
        • 1970-01-01
        • 2020-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多