我在 PHP中有一个类似于以下结构的数组(使用 elfech_all()
获取表的所有行):
来自 $miarray 的 var_dump()
array(3) {
[0]=> array(3) {
[0]=> string(1) "1" // option_id
[1]=> string(9) "site_name" // option_name
[2]=> string(8) "FullAuth" // option_value
}
[1]=> array(3) {
[0]=> string(1) "2" // option_id
[1]=> string(8) "home_url" // option_name
[2]=> string(25) "http://ejemplo.com" // option_value
}
[2]=> array(3) {
[0]=> string(1) "3" // option_id
[1]=> string(8) "auth_url" // option_name
[2]=> string(31) "http://ejemplo.com/user/" // option_value
}
}
为了更好地理解,这些子数组中的每一个都是存储在数据库中的选项,我想要实现的是仅通过知道其名称(option_name)来访问每个选项的值(option_value )。
我想得到这样的东西:
function obtenerOpcion($option_name) {
// Buscar la opción dentro de $miarray
// return...
}
echo obtenerOpcion("home_url"); // http://ejemplo.com
如果我理解正确,给定一个
home_url
或另一个值,您希望获得以下值,在这种情况下:http://ejemplo.com
根据您拥有的数组,您可以编写如下函数:
让我们用几种可能性来测试这个函数:
推荐
由于它
fetch_all
接受一个参数来创建关联数组,因此您最好创建一个该类型的数组,这样您就可以更准确地使用列名访问该值。在给定的答案中,假设数组中没有不规则性(它总是
option_value
在 之后option_name
),如果没有,则不会获得正确的值,这就是为什么通过名称获取值总是更安全的原因索引而不是序号。如果
fetch_all
传递了关联数组的标志,它将像这样创建:请注意,我有意在第二个数组上放置了不同的顺序。
不会有问题,因为该函数将通过键的名称搜索值,无论它是 after 还是 before
option_name
:此外,这将使代码更具可移植性。假设我们不仅要搜索
option_value
,而且在某些情况下要搜索option_id
。相同的功能会做,添加第三个参数和一个额外的检查$mKey
:各种测试:
从PHP中的数组开始,类似于建议的数组:
您创建一个函数,该函数必须接收两个参数,一个用于搜索的参数,另一个参数必须是执行搜索的数组。您可以执行类似于以下的操作:
结果
echo
将是期望的:您还可以创建一个只接收所需参数的函数,如下所示:
在二维数组中,需要两个索引来选择一个元素。
array_column
生成数组 ["site_name","home_url","auth_url] 查找array_search
option_name 在所述数组中的位置