使用PHP

时间:2018-09-09 08:40:04

标签: php

我尝试打印$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;

等等。

谢谢!问题是什么都没有显示出来,但是当我在开关/外壳外面输入例如<?=$data['type']?>时,就会显示出来。

3 个答案:

答案 0 :(得分:3)

问题是您的代码正在尝试使用多个值数组,例如唯一变量。

您需要执行一次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;
  }
}

答案 1 :(得分:2)

如果唯一合格的条件是一组已知的键,则可以根据白键列表过滤出不需要的元素。然后使用foreach循环仅回显列入白名单的数据。如果没有限定元素,则不会调用任何回声。

明显优势:

  • 白名单阵列使该解决方案具有很高的可扩展性,以防您希望调整要显示的数据
  • 对数据进行预过滤意味着foreach循环永远不会迭代数据而不显示数据。
  • 回声线是D.R.Y. (不要重复自己);这样可以使您的代码干净,简洁,易于管理

代码:(Demo

$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>";
}

答案 2 :(得分:1)

在这种情况下,使用PHP's 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>';
  }
}