Печать ключей массива
Я не мог понять, как передать переменное число переменных в функцию. Я думал, что переход в массив и использование ключей массива для имен переменных может заменить необходимость передачи дополнительных переменных в функцию, и это сработало (я уверен, что есть лучший способ достичь этого, предложения приветствуются). Однако я не могу получить ключи из массива внутри функции.
Массив:
$parameters[day] = 1;
$parameters[month] = 8;
$parameters[year] = 2010;
Внутри функции:
foreach(key($parameters) as $key)
{
print($key);
print("<br>");
}
Код внутри функции повторяет предупреждение: неверный аргумент, предоставленный foreach(). Как я могу вытащить ключи из массива?
Ответы
Ответ 1
Вы можете использовать функцию PHP array_keys, чтобы захватить ключи, например:
foreach(array_keys($parameters) as $paramName)
echo $paramName . "<br>";
Или вы можете запустить массив с помощью специального foreach
, который позволяет вам разделить ключ и значение для каждого элемента, например:
foreach($parameters as $paramName => $value)
echo $paramName . "<br>";
Кроме того, убедитесь, что вы используете "string"
(с кавычками) или integer (например, 1337
) в качестве своего ключа:
$parameters["day"] = 1;
$parameters["month"] = 8;
$parameters["year"] = 2010;
ИЛИ если вы хотите получить fancier:
$parameters = array(
"day" => 1,
"month" => 8,
"year" => 2010
);
Ваш код должен выглядеть так:
$parameters = array(
"day" => 1,
"month" => 8,
"year" => 2010
);
foreach($parameters as $paramName => $paramValue)
echo $paramName . "<br>";
Ответ 2
Передача ассоциативного массива функции является разумным способом передать переменное количество параметров.
foreach ($parameters as $key => $value) {
echo $key . ' = ' . $value . '<br>';
}
В качестве альтернативы вы можете передать экземпляр stdClass
(приведение аргумента к объекту). Но массив выполняет эту работу.
Я предполагаю, что ваши ключи массива не являются константами, и в этом случае они должны быть кавычками:
$parameters['day'] = 1;
$parameters['month'] = 8;
$parameters['year'] = 2010;
Ответ 3
Я уверен, что есть лучший способ сделайте это, предложения приветствуются
Потому что вы попросили альтернативные предложения, вот один. Вы можете использовать varargs для передачи переменной числа аргументов функции. Вот пример:
function my_function() {
$numArgs = func_num_args();
$args = func_get_args(); // an array of the arguments, in order
}
Это не предлагает вам аргументы "named", но это позволяет вам изменять количество аргументов (например, вы утверждаете, что пытаетесь сделать в своем вопросе).
Вот несколько соответствующих страниц документации:
Однако, чтобы не сказать, что ваш подход, основанный на массиве, является плохим. В некотором смысле он обеспечивает читаемость битов, поскольку вы явно сопоставляете ключи со значениями; сопровождающие, читающие ваш код, будут лучше понимать, что передается функции. Я просто даю вам несколько вариантов.
Ответ 4
Функция array_keys вернет массив всех ключей массива.
Ответ 5
попробуйте это
foreach($parameters as $key => $value)
Ответ 6
<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
?>
Ответ 7
Если вы хотите просто вывести клавиши, вы можете сделать это без циклов:
$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)));
Ответ 8
foreach(array_keys($parameters) as $key) {
echo $key.'<br/>';
}