簡體   English   中英

使用PHP在switch case中打印數組

[英]Print array in switch case with PHP

我試圖打印$data數組的不同字段,如果它們存在使用switch / case。

Array ( [title] => title [type] => Movie [hour] => [dayoftheweek] => 5 [dayofthemonth] => )

我正在嘗試做什么:

<?php
switch($data):
    case 'title': 
        ?>
        <div class="col-md-4">
            <div class="name-value" id="title"><?=$data['title']?></div>
        </div>
        <?php
    break;
    case 'type': 
        ?>
        <div class="col-md-4">
            <div class="name-value" id="type"><?=$data['type']?></div>
        </div>
        <?php
    break;
endswitch;

等等。

謝謝! 問題是什么都沒有顯示,但當我鍵入例如<?=$data['type']?>在開關/外殼之外它正在顯示。

問題是你的代碼試圖使用多個值的數組,如一個唯一的變量。

您需要執行foreach來解析所有數組變量,然后您可以使用開關來獲取每個值(標題,類型等)並返回所需的HTML。

試試這個:

<?php 
/* Parse all values */
foreach ($data as $key => $value) {
  /* Parse all variables in each value */
  switch($key) {
    case 'title':
      ?>
        <div class="col-md-4">
          <div class="name-value" id="title"><?=$value?></div>
        </div>
      <?php
      break;
    case 'type':
      ?>
        <div class="col-md-4">
          <div class="name-value" id="type"><?=$value?></div>
        </div>
      <?php
      break;
  }
}

如果唯一的限定條件是一組已知的鍵,則可以根據白鍵列表過濾掉您不需要的元素。 然后使用foreach循環僅回顯列入白名單的數據。 如果沒有符合條件的元素,則不會調用回聲。

顯着優勢:

  • 如果您希望調整要顯示的數據,白名單數組使解決方案具有很高的可擴展性
  • 預過濾數據意味着foreach循環從不迭代數據而不顯示數據。
  • 回聲線是干的(不要重復自己); 這可以使您的代碼干凈,簡潔,易於管理

代碼:( 演示

$data = ['title' => 'The Title', 'type' => 'Movie', 'hour' => '', 'dayoftheweek' => 5, 'dayofthemonth' => ''];
$whitelist = ['title' => '', 'type' => ''];
$filtered = array_intersect_key($data, $whitelist);
// var_export($filtered);  // uncomment if you want to see what remains

foreach($filtered as $key => $value) {
    echo "<div class=\"col-md-4\">";
        echo "<div class=\"name-value\" id=\"$key\">$value</div>";
    echo "</div>";
}

輸出:

<div class="col-md-4">
    <div class="name-value" id="title">The Title</div>
</div>
<div class="col-md-4">
    <div class="name-value" id="type">Movie</div>
</div>

根據項目要求,可以通過多種方式實現此任務。 您甚至可能希望構建更多過濾條件。 如果您想更確定什么是最好的技術,那么您需要提供更多/更好的項目細節。


如果您不需要可擴展的解決方案,但需要單獨/不同地處理每個密鑰的數據,那么您可以編寫isset()調用並回顯內容而無需任何循環(迭代條件)。

if (isset($data['title'])) {
    echo "<div class=\"col-md-6\">";
        echo "<div class=\"unique123\" id=\"movie_title\">{$data['title']}</div>";
    echo "</div>";
}
if (isset($data['type'])) {
    echo "<div class=\"col-md-4\">";
        echo "<div class=\"type_group\" id=\"type\">{$data['type']}</div>";
    echo "</div>";
}

在您的情況下,使用PHP的foreach,您必須檢查當前元素的鍵,在每次迭代時分配給$key變量。

foreach (array_expression as $key => $value)
    statement

還添加了一些重構,以避免腳本中出現重復的代碼。

代碼示例:

<?php 
foreach ($data as $key => $value) {
  if (in_array($key, ['title', 'type'])) {
    echo '<div class="col-md-4">';
      echo '<div class="name-value" id="' . $key . '">' . $value . '</div>';
    echo '</div>';
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM