PHP数组,用于创建多个<li>实例

时间:2016-06-09 03:35:33

标签: php arrays variables

我正在创建一个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>";
}

1 个答案:

答案 0 :(得分:2)

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

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

foreach($array as $element)$array中的每个元素执行语句正文中的所有内容,可以使用$element访问当前元素。

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

由于您的数据比一个值更复杂,因此无法直接将其存储在数组中。您首先需要以允许您将每个条目(module_numbermodule_namemodule_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"
    }
}