Распечатайте ключи массива

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

Массив:

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

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

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

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

21
задан JMC 17 August 2010 в 22:11
поделиться

7 ответов

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

foreach(array_keys($parameters) as $paramName)
  echo $paramName . "<br>";

Или вы можете пройти через массив, используя специальный foreach , который позволяет вам разделить ключ и значение для каждого элемента, например:

foreach($parameters as $paramName => $value)
  echo $paramName . "<br>";

Также убедитесь, что вы используете «строку» (в кавычках) или целое число (например, 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>";
45
ответ дан 29 November 2019 в 06:36
поделиться

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

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

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

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

$parameters['day'] = 1;
$parameters['month'] = 8;
$parameters['year'] = 2010; 
6
ответ дан 29 November 2019 в 06:36
поделиться

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

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

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

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

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

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

3
ответ дан 29 November 2019 в 06:36
поделиться

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

2
ответ дан 29 November 2019 в 06:36
поделиться

попробуйте это

foreach($parameters as $key => $value)
2
ответ дан 29 November 2019 в 06:36
поделиться
<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
?>
1
ответ дан 29 November 2019 в 06:36
поделиться
foreach(array_keys($parameters) as $key) {
   echo $key.'<br/>';
}
0
ответ дан 29 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: