PHP: значение массива доступа на лету

Представленные здесь решения setTimeout / setInterval будут работать только в определенных обстоятельствах.

Проблема проявляется особенно в старых версиях Internet Explorer до 8.

Переменные, влияющие на успех из этих setTimeout / setInterval решений:

1) dynamic or static HTML
2) cached or non cached requests
3) size of the complete HTML document
4) chunked or non chunked transfer encoding

исходный (собственный Javascript) код, решающий эту конкретную проблему, находится здесь:

https://github.com/dperini/ContentLoaded
http://javascript.nwbox.com/ContentLoaded (test)

это код, из которого jQuery команда построила свою реализацию.

48
задан Michael 1 February 2016 в 14:34
поделиться

4 ответа

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

$variable = array('a','b','c');
echo $variable[$key];
unset($variable);

Или, Вы могли записать небольшую функцию:

function indexonce(&$ar, $index) {
  return $ar[$index];
}

и вызов это с:

$something = indexonce(array('a', 'b', 'c'), 2);

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

16
ответ дан onnodb 26 November 2019 в 18:49
поделиться

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

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

$x = array(1,2,3);
print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.

function ret($foo) { return $foo; }
echo ret($x)[1]; // illegal, on a call expression, not a variable exp.
38
ответ дан John Douthat 26 November 2019 в 18:49
поделиться

Или что-то вроде этого, если вам нужно значение массива в переменной

$variable = array('a','b','c');
$variable = $variable[$key];
0
ответ дан 26 November 2019 в 18:49
поделиться

на самом деле есть элегантное решение :) Следующее будет назначать 3-й элемент массива, возвращаемого myfunc, переменной $ myvar:

$myvar = array_shift(array_splice(myfunc(),2));
1
ответ дан 26 November 2019 в 18:49
поделиться
Другие вопросы по тегам:

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