【问题标题】:PHP Array that creates multiple <li> instances创建多个 <li> 实例的 PHP 数组
【发布时间】:2016-06-09 03:35:33
【问题描述】:

我正在创建一个 PHP 菜单系统(用于教育程序),其中包含大量模块编号、if 语句等。

我想做的是去:

'module_number' = 'NUMBER'
'module_name'   = 'NAME'
'module_url'    = 'URL',

'module_number' = 'NUMBER'
'module_name'   = 'NAME'
'module_url'    = 'URL',

'module_number' = 'NUMBER'
'module_name'   = 'NAME'
'module_url'    = 'URL', etc, etc

然后为上面的每个模块创建一个 li 元素,格式为:

<li>
    NUMBER
    <?php if (( NUMBER * 3 - 1 ) < $GlobalVariable ) { ?>
        <a href="URL">NAME</a>
    <?php } else { ?>
        NAME    
</li>

有什么办法可以做到吗?

我认为它会与数组等有关,但我仍在学习。


编辑:

好的,我有一个多维数组正在发生(感谢您告诉我它们叫什么,以便我学习)。

$daysregistered = 2;
$modules = array (
    array(0,'Thought Engineering Introduction','thought-engineering/'),
    array(1,'Leadership','thought-engineering/leadership'),
    array(2,'The Key to Velocity','thought-engineering/the-key-to-velocity'),
    array(3,'Master Level Communication','thought-engineering/master-level-communication'),
    array(4,'Priming for Opportunity','thought-engineering/'),
    array(5,'Quality','thought-engineering/'),
    array(6,'Your Most Critical Role as a Leader','thought-engineering/'),
    array(7,'Comprehensive Single System Perspective','thought-engineering/'),
    array(8,'Nexus Points & Income Time/Busy Time','thought-engineering/'),
    array(9,'Goals, Precession & Motion','thought-engineering/'),
    array(10,'Risk','thought-engineering/'),
    array(11,'Measurement','thought-engineering/'),
    array(12,'Bringing it All Together','thought-engineering/')
);

for ($row = 0; $row < 12; $row++) {
    $unlocked = ( $modules[$row][0] * 3 - 1 ) < $daysregistered;
    echo "<li>";
    if ( $unlocked ) { echo "<a href='".$modules[$row][2]."'>"; };
    echo "<span class='module_no'>".$modules[$row][0]."</span>";
    echo "<span class='module_descript'>".$modules[$row][1];
    echo "<span class='module_access";
    if ( $unlocked ) { echo " lock"; };
    echo"'><i class='fa fa-2x fa-";
    if ( ! $unlocked ) { echo "un"; };
    echo "lock";
    if ( ! $unlocked ) { echo "-alt"; };
    echo "' aria-hidden='true'></i></span></span>";
    if ( $unlocked ) { echo "</a>"; };
    echo "</li>";
}

【问题讨论】:

  • 几分钟前你刚刚问了一个问题:stackoverflow.com/q/37716211/3933332,你有一些链接可以阅读。现在我强烈建议你真的给你一些时间来阅读它们并玩弄它。因为在这里您将需要使用多维数组并且要理解它们,您首先需要了解基本数组。 (甚至可以在谷歌上搜索一些关于数组的基本教程练习)
  • 对于您的问题:标题不需要标签,例如PHP,因为您已经有了标签来标记您的问题;标题应该像您的问题的“关键字摘要”;在问题主体本身中,您可以尝试更具体并展示一些努力:展示您所做的尝试和研究,您在哪里,您想要达到的位置以及您遇到的问题;最后“谢谢!”只是噪音,您可以将其从问题中删除;
  • (现在最好删除这里的问题;给自己一些时间阅读和学习旧问题的新内容;为新问题做一些研究;阅读How to Ask再次;因为被否决的问题对你不利)
  • 公平通话。我现在正在尝试。差不多好了。我只是遇到一个错误,将作为编辑发布。
  • 这是你在提问之前通常应该做的。你编码,你尝试一些东西,你会被卡住。您隔离问题、调试、搜索和试错。然后,如果您没有取得任何进展并且在互联网上没有找到任何内容,请阅读 minimal reproducible exampleHow to Ask 并写下您的问题。

标签: php arrays variables


【解决方案1】:

要将某些程序逻辑应用于多个元素,最好使用某种循环 - 它可以防止您重复自己(DRY-原则 - “不要重复自己”)。

PHP 知道几种循环结构,whilefor 是最常见的。但是对于数组,特别是如果您只打算读取而不是写入它们,PHP 也提供了一个简单的循环指令:foreach

foreach($array as $element)$array 中的每个元素执行语句主体内的所有内容,当前元素可通过$element 访问。

因此,解决问题的最简单方法是将每个元素存储在数组中,并使用上述foreach 对其进行循环(循环数组也称为iterating 数组)。


由于您的数据比一个值更复杂,因此您不能将其直接存储在数组中。您首先需要以一种允许您将每个条目的所有 3 个属性(module_numbermodule_namemodule_url)存储在一个变量中的方式对其进行结构化。

最简单的选择是使用associative arrays。这些是具有命名键(而不是数字索引)的数组。您可以像这样构建每个条目:

$entry = array(); // Since PHP5: $entry = []
$entry['module_number'] = 'NUMBER';
$entry['module_name']   = 'NAME';
$entry['module_url']    = 'URL';

使用array literals也可以这样写:

$entry = array (
    'module_number' => 'NUMBER',
    'module_name'   => 'NAME',
    'module_url'    => 'URL'
)  // in PHP5+ you can also use [..] instead of array(...) again

现在您可以将具有这种精确结构的多个条目存储在一个数组中,然后使用foreach 对其进行循环(备注:$array[]=$entry 将新条目添加到现有数组中,相当于array_push($array, $entry)):

// create an empty array
$entries  = [];

// add data
$entries[]= [
    'module_number' => 'NUMBER',
    'module_name'   => 'NAME',
    'module_url'    => 'URL'
];
$entries[]= [
    'module_number' => 'NUMBER',
    'module_name'   => 'NAME',
    'module_url'    => 'URL'
];
$entries[]= [
    'module_number' => 'NUMBER',
    'module_name'   => 'NAME',
    'module_url'    => 'URL'
];

// loop over all entries
foreach ($entries as $entry) {
    echo "<li>\n" . $entry['module_number'] . "\n";
    if (($entry['module_number'] * 3 - 1) < $GlobalVariable) {
        echo '<a href="' . $entry['module_url'] . '">' . $entry['module_name'] . "</a>\n";
    } else {
        echo $entry['module_url'] . "\n"
    }
}

【讨论】:

  • OP 几分钟前刚问了一个问题,他甚至不知道数组。因此,仅向他提供一些代码可能对他没有帮助,只会损坏网站。因为他甚至可以在不理解代码的情况下复制和粘贴代码。然后他会回来问下一个问题给他写代码。
  • @Rizier123 在努力编写代码之前,我没有阅读您的标题。看到现在的tihngsd,我同意你的看法。不过现在我已经付出了一些努力来回答这个问题,所以我真的不想删除它.​​.....
  • *cmets该死的,今天不会英语
  • 是的。如果您愿意,现在可以尝试编辑您的答案并使其更加详细,尝试解释 OP 正在发生的事情,并可能添加一些手动链接供他阅读。
  • @Rizier123 就在我们发言时
猜你喜欢
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
相关资源
最近更新 更多