flsouto/array2options

该包的最新版本(1.0.2)没有可用的许可信息。

生成用于插入select元素的选项标签的函数

1.0.2 2016-10-23 14:41 UTC

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,而不是重新发明轮子。