用PHP打印开关盒中的数组

用PHP打印开关盒中的数组,php,Php,我正在尝试使用switch/case打印$data数组的不同字段(如果存在) Array ( [title] => title [type] => Movie [hour] => [dayoftheweek] => 5 [dayofthemonth] => ) 我想做的是: <?php switch($data): case 'title': ?> <div class="col-md-4">

我正在尝试使用switch/case打印
$data
数组的不同字段(如果存在)

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;

正在显示的外部开关/案例。

问题在于,您的代码试图使用一个倍数值数组,比如一个唯一变量

您需要执行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循环不会在不显示数据的情况下迭代数据
  • 回音线是D.R.Y.(不要重复你自己);这使您的代码保持干净、简洁和易于管理
代码:()


在您的情况下,使用时必须检查当前元素的键,在每次迭代中分配给
$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>';
  }
}

开关($data)
没有意义。现在,您可以将
$data
(这是一个数组)与字符串“title”进行比较。您可能希望
如果(isset($data['title']){//echo the title}
?或者希望所有内容都打印出来,只需使用不同的
id=“title”
?然后使用我的第二个注释<代码>foreach($key=>$value){switch($key)…}
没有代码只回答问题,你不是新来的。这个答案可能会受到太多迭代的影响。即使在成功显示
标题
类型
数据之后,循环仍会继续工作。(不是最佳实践)我不知道谁在否决我采用最佳实践的答案。被接受的解决方案不是干涸的,并且容易运行无意义的迭代。
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>";
}
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>';
  }
}