我正在创建一个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>";
}
答案 0 :(得分:2)
要将某些程序逻辑应用于多个元素,最好使用某种循环 - 它会阻止您重复自己( DRY -Principle - “不要重复自己”)。
PHP知道几个循环结构,while
和for
是最常见的结构。但是对于数组,特别是如果你只打算阅读,而不是编写它们,PHP也提供了一个简单的循环指令:foreach
。
foreach($array as $element)
为$array
中的每个元素执行语句正文中的所有内容,可以使用$element
访问当前元素。
因此,解决问题的最简单方法是,将每个元素存储在数组中,并使用所述foreach
循环遍历它(在数组上循环也称为iterating
数组)。
由于您的数据比一个值更复杂,因此无法直接将其存储在数组中。您首先需要以允许您将每个条目(module_number
,module_name
,module_url
)的所有3个属性存储在一个变量中的方式构建它。
最简单的选择是使用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
预先添加现有数组的新条目,它等同于{{ 3}}):
// 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"
}
}