Доступ к ассоциативному массиву Php с переменными переменными [duplicate]

2017 ответ: теперь вы можете делать то, что хотите, в каждом текущем браузере и узле

. Это довольно просто:

  • Вернуть обещание
  • Используйте 'await' , в котором JavaScript ожидает, что обещание будет разрешено в vlue (например, hTTP-ответ)
  • Добавьте 'async' для родительской функции

Вот рабочая версия вашего кода:

(async function(){

var response = await superagent.get('...')
console.log(response)

})()

ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]

6
задан Jason McCreary 16 October 2014 в 21:19
поделиться

4 ответа

Ниже приведен пример, следующий за синтаксисом имени переменной, который также разрешает элементы массива:

// String that has a value similar to an array key
$string = 'welcome["hello"]';

// initialize variable function (here on global variables store)
$vars = $varFunc($GLOBALS);

// alias variable specified by $string
$var = &$vars($string);

// set the variable
$var = 'World';

// show the variable
var_dump($welcome["hello"]); # string(5) "World"

Со следующей реализацией:

/**
 * @return closure
 */
$varFunc = function (array &$store) {
    return function &($name) use (&$store)
    {
        $keys = preg_split('~("])?(\\["|$)~', $name, -1, PREG_SPLIT_NO_EMPTY);
        $var = &$store;
        foreach($keys as $key)
        {
            if (!is_array($var) || !array_key_exists($key, $var)) {
                $var[$key] = NULL;
            }
            $var = &$var[$key];
        }
        return $var;
    };
};

Поскольку вы не можете перегружать переменные в PHP, вы ограничены экспрессией PHP здесь, то есть не существует контекста записи для переменных ссылок как значений функции возврата, что требует дополнительного сглаживания:

$var = &$vars($string);

Если что-то вроде этого не в соответствии с вашими потребностями, вам нужно исправить PHP и, если не вариант, PHP не предлагает функции языка, которые вы ищете.

См. также соответствующий вопрос: использовать строки для доступа ( потенциально больших) многомерных массивов .

3
ответ дан Community 27 August 2018 в 09:07
поделиться

Вы можете использовать eval, хотя я бы не рекомендовал его в производственной среде, он имеет свои преимущества.

<?
$string = 'welcome["hello"]';
eval('$' . $string . " = 'thisworks';");

// This also works : eval("$$string = 'thisworks';");

// I could then print the array keys value like this
print( $welcome["hello"] ); // Prints 'thisworks'
0
ответ дан Bryan 27 August 2018 в 09:07
поделиться

Нет, вы не можете так поступать. В качестве альтернативы вы можете установить опорную переменную с помощью

$welcomeHello = &$welcome["hello"]

, а затем использовать

$welcomeHello = 'thisworks'

для настройки содержимого элемента.

Это было бы более правильным и даже более быстрый способ установки элементов массива.

1
ответ дан RReverser 27 August 2018 в 09:07
поделиться

В Переменные переменные символы в строке обрабатываются буквально. Они не интерпретируют то, что внутри строки. Таким образом, [] символы в $string не рассматриваются как запись массива. Скорее, он рассматривается как часть имени переменной.

после выполнения $$string = 'thisworks'; PHP создает переменную с именем welcome["hello"] буквально со значением, установленным на thisworks.

Для печати используйте эту нотацию,

print (${'welcome["hello"]'});
5
ответ дан Shiplu Mokaddim 27 August 2018 в 09:07
поделиться
Другие вопросы по тегам:

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