Печать ключей массива

Я не мог понять, как передать переменное число переменных в функцию. Я думал, что переход в массив и использование ключей массива для имен переменных может заменить необходимость передачи дополнительных переменных в функцию, и это сработало (я уверен, что есть лучший способ достичь этого, предложения приветствуются). Однако я не могу получить ключи из массива внутри функции.

Массив:

$parameters[day] = 1; $parameters[month] = 8; $parameters[year] = 2010; 

Внутри функции:

 foreach(key($parameters) as $key) { print($key); print("<br>"); } 

Код внутри функции перенастраивает предупреждение: Недействительный аргумент, предоставленный foreach (). Как я могу вытащить ключи из массива?

Solutions Collecting From Web of "Печать ключей массива"

Вы можете использовать функцию array_keys PHP для захвата ключей, например:

 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>"; 

Передача ассоциативного массива функции является разумным способом передать переменное количество параметров.

 foreach ($parameters as $key => $value) { echo $key . ' = ' . $value . '<br>'; } 

В качестве альтернативы вы можете передать экземпляр stdClass (приведение аргумента к объекту). Но массив выполняет эту работу.

Я предполагаю, что ваши ключи массива не являются константами, и в этом случае они должны быть кавычками:

 $parameters['day'] = 1; $parameters['month'] = 8; $parameters['year'] = 2010; 

Я уверен, что есть лучший способ сделать это, предложения приветствуются

Потому что вы попросили альтернативные предложения, вот один. Вы можете использовать varargs для передачи переменной числа аргументов функции. Вот пример:

 function my_function() { $numArgs = func_num_args(); $args = func_get_args(); // an array of the arguments, in order } 

Это не предлагает вам аргументы «named», но это позволяет вам изменять количество аргументов (например, вы утверждаете, что пытаетесь сделать в своем вопросе).

Вот несколько соответствующих страниц документации:

  • func_get_args ()
  • func_get_arg ()
  • func_num_args ()

Однако это не означает, что ваш подход, основанный на массиве, является плохим. В некотором смысле он обеспечивает читаемость битов, поскольку вы явно сопоставляете ключи со значениями; сопровождающие, читающие ваш код, будут лучше понимать, что передается функции. Я просто даю вам некоторые варианты.

Функция array_keys возвращает массив всех ключей массива.

попробуй это

 foreach($parameters as $key => $value) 
 <?php $array = array(0 => 100, "color" => "red"); print_r(array_keys($array)); ?> 

Если вы хотите просто вывести клавиши, вы можете сделать это без циклов:

 $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))); 
 foreach(array_keys($parameters) as $key) { echo $key.'<br/>'; }