Как я могу преобразовать список параметров функции PHP в ассоциативный массив?

Единственной разницей между литералами объектов и созданными объектами являются свойства, наследованные от прототипа.

var o = {
  'a': 3, 'b': 4,
  'doStuff': function() {
    alert(this.a + this.b);
  }
};
o.doStuff(); // displays: 7
<час>

Вы могли сделать фабрику структуры.

function makeStruct(names) {
  var names = names.split(' ');
  var count = names.length;
  function constructor() {
    for (var i = 0; i < count; i++) {
      this[names[i]] = arguments[i];
    }
  }
  return constructor;
}

var Item = makeStruct("id speaker country");
var row = new Item(1, 'john', 'au');
alert(row.speaker); // displays: john
9
задан Fragsworth 14 September 2009 в 02:38
поделиться

2 ответа

Вы можете сделать это с помощью compact :

function myFunc($a, $b, $c) {
    $params = compact('a', 'b', 'c');
    // ...
}

Или get_defined_vars () предоставит вам ассоциативный массив всех переменных, определенных в эта область, которая будет работать, но я думаю, она также может включать $ _ POST , $ _ GET и т.д ...

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

Или просто укажите один аргумент, который представляет собой массив:

function myFunc($params) {

}

compact () кажется наиболее близким к тому, что вам нужно.

12
ответ дан 4 December 2019 в 08:15
поделиться

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

function my_function($a, $b, $c) {

    $params = get_defined_vars(); // <--- create the $params array

    var_dump($params['a'] === $a); // results in bool(true)
    var_dump($params['b'] === $b); // results in bool(true)
    var_dump($params['c'] === $c); // results in bool(true)
}
9
ответ дан 4 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

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