我无法弄清楚如何将可变数量的变量传递给函数。我认为传入一个数组并使用变量名称的数组键可以取代将额外的变量传递给函数的需要,并且它有效(我确信有更好的方法来实现这一点,建议欢迎)。但是,我似乎无法从函数内部的数组中取出键。
数组:
$parameters[day] = 1;
$parameters[month] = 8;
$parameters[year] = 2010;
功能内部:
foreach(key($parameters) as $key)
{
print($key);
print("<br>");
}
函数内部的代码返回一个警告:为foreach()提供的参数无效。如何将键拉出阵列?
答案 0 :(得分:43)
您可以使用PHP的array_keys函数来获取密钥,如下所示:
foreach(array_keys($parameters) as $paramName)
echo $paramName . "<br>";
或者,您可以使用特殊的foreach
来运行数组,它允许您为每个元素分隔键和值,如下所示:
foreach($parameters as $paramName => $value)
echo $paramName . "<br>";
另外,请确保使用"string"
(带引号)或整数(例如1337
)作为键,如下所示:
$parameters["day"] = 1;
$parameters["month"] = 8;
$parameters["year"] = 2010;
或者如果你想获得更多的爱好者:
$parameters = array(
"day" => 1,
"month" => 8,
"year" => 2010
);
您的代码应如下所示:
$parameters = array(
"day" => 1,
"month" => 8,
"year" => 2010
);
foreach($parameters as $paramName => $paramValue)
echo $paramName . "<br>";
答案 1 :(得分:6)
将关联数组传递给函数是传递可变数量参数的合理方法。
foreach ($parameters as $key => $value) {
echo $key . ' = ' . $value . '<br>';
}
或者,您可以传入stdClass
的实例(将参数强制转换为对象)。但阵列可以完成这项工作。
我假设你的数组键不是常量,在这种情况下它们应该是带引号的字符串:
$parameters['day'] = 1;
$parameters['month'] = 8;
$parameters['year'] = 2010;
答案 2 :(得分:3)
我确信有更好的方法 实现这一点,建议欢迎
因为您要求提供替代建议,所以这是一个。您可以使用varargs将可变数量的参数传递给函数。这是一个例子:
function my_function() {
$numArgs = func_num_args();
$args = func_get_args(); // an array of the arguments, in order
}
这不会为您提供“命名”参数,但它确实允许您使用可变数量的参数(就像您声称要在您的问题中尝试做的那样)。
以下是一些相关的文档页面:
但是,这并不是说基于阵列的方法很糟糕。在某些方面,它提供了电池可读性,因为您明确地将键映射到值;阅读代码的维护者将能够更好地理解传递给函数的内容。我只是给你一些选择。
答案 3 :(得分:2)
array_keys函数将返回所有数组键的数组。
答案 4 :(得分:2)
试试这个
foreach($parameters as $key => $value)
答案 5 :(得分:1)
<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
?>
答案 6 :(得分:1)
如果您只想输出密钥,则无需循环即可完成此操作:
$parameters = ["day" => 1, "month" => 8, "year" => 2010];
echo implode('<BR>', array_keys($parameters));
或输出带值的键:
$parameters = ["day" => 1, "month" => 8, "year" => 2010];
echo implode('<BR>', array_map(function($v, $k){ return $k.'='.$v;}, $parameters, array_keys($parameters)));
答案 7 :(得分:0)
foreach(array_keys($parameters) as $key) {
echo $key.'<br/>';
}