flsouto / array2options
生成用于插入select元素的选项标签的函数
This package is not auto-updated.
Last update: 2024-09-18 20:34:23 UTC
README
通过composer安装此库
composer require flsouto/array2options
array2options
此函数允许您轻松从数组构建用于插入“select”标签的选项。
<?php
require_once('vendor/autoload.php');
$choices = ['apple','orange','banana'];
echo "<select name=\"fruit\">\n";
echo "<option value=\"none\">Choose a Fruit:</option>\n";
echo array2options($choices);
echo "</select>";
上述php代码将生成以下html输出
<select name="fruit">
<option value="none">Choose a Fruit:</option>
<option value="apple">apple</option>
<option value="orange">orange</option>
<option value="banana">banana</option>
</select>
选择选项
在上面的html输出中,“选择一个水果”选项将默认选中,因为它是在select元素内的第一个选项,并且没有其他选项被标记为选中。但是,如果您想选中“orange”选项,可以使用array2options函数的第二个参数
<?php
require_once('vendor/autoload.php');
$choices = ['apple','orange','banana'];
echo "<select name=\"fruit\">\n";
echo "<option value=\"none\">Choose a Fruit:</option>\n";
echo array2options($choices, "orange");
echo "</select>";
注意以下输出中的“selected”属性
<select name="fruit">
<option value="none">Choose a Fruit:</option>
<option value="apple">apple</option>
<option value="orange" selected>orange</option>
<option value="banana">banana</option>
</select>
使用关联数组
虽然array2options在值与其关联标签相同时生成选项很好,但有时我们需要生成值与标签不同的选项。这就是assoc2options函数派上用场的地方
<?php
require_once('vendor/autoload.php');
$choices = [
'none' => 'Choose a Color',
'#C0C0C0' => 'Silver',
'#FF0000' => 'Red',
'#000000' => 'Black'
];
echo "<select name=\"color\">\n";
echo assoc2options($choices);
echo "</select>";
输出
<select name="color">
<option value="none">Choose a Color</option>
<option value="#C0C0C0">Silver</option>
<option value="#FF0000">Red</option>
<option value="#000000">Black</option>
</select>
注意:assoc2options也允许您设置一个选项为“selected”,就像array2option一样。
将数据集转换为选项
通常您将处理从数据库中检索的行。在这种情况下,数据以数据集(也称为“数组数组”)的形式出现。因此,如果您想为这种格式的数据生成选项,应使用dataset2options
<?php
require_once('vendor/autoload.php');
// Rows fetched from database
$rows = [
[
'id' => 93,
'name' => 'Category 1'
],
[
'id' => 102,
'name' => 'Category 2'
],
[
'id' => 106,
'name' => 'Category 3'
]
];
// Prepends a "caption" option
array_unshift($rows, ['id' => 0, 'name'=>'Choose a Category']);
// Renders
echo "<select name=\"category_id\">\n";
echo dataset2options($rows);
echo "</select>";
这将按预期生成
<select name="category_id">
<option value="0">Choose a Category</option>
<option value="93">Category 1</option>
<option value="102">Category 2</option>
<option value="106">Category 3</option>
</select>
此函数通过查看每个数组的第一个属性来确定每个选项的“值”,然后查看第二个属性以确定“标签”。因此,如果您的数据集除了对象的id和名称之外还包含更多数据,只要这些属性分别在第一和第二位置,那就没问题。
注意:dataset2options也允许您设置一个选项为“selected”,就像array2option和assoc2options一样。
最后思考
虽然迭代数组并在模板中打印标签相对简单,但这会使您的代码变得丑陋,而且是一项繁琐的工作——尤其是当您必须包含逻辑来选择其中一个选项时。
为什么不生成整个select小部件呢?
我听说有人抱怨这个库不能帮助构建整个“select”元素。然而,如果您这样考虑,制作select标签并不困难。所谓的“复杂性”在于生成其中包含的变量内容。此外,这样您可以使用纯HTML代码自定义select标签,而无需学习奇特的API。学习和使用有用的API,而不是重新发明轮子。