Задача на создание массива на основе списка переменных.

Здравствуйте. Изучаю книгу Хольцнера. Обнаружил у него задачу, которая не идет у меня в двух онлайн-интепретаторах. Посмотрите, пожалуйста, в чем дело. Ответ дает такой: Array ( )

Условие задачи (Глава. Извлечение переменных из массивов, стр. 94).
А что делать, если требуется выполнить обратную операцию и сформировать
массив на основе списка переменных? Для этого предназначена функция
compact. В качестве аргументов она принимает имена переменных или массивы
имен переменных. Значения переменных с указанными именами становятся
очередными элементами массива.

<?php 
$firstname = "Сергей"; 
$lastname = "Банников"; 
$role = "Редактор"; 
$subarray = array ("$firstname", "$lastname "); 
$resultarray = compact ($subarray, "$role"); 
print_r ($resultarray); 
?>

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

Укажите страницу и раздел книги, проставьте ключевые слова.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

на сандбокс (http://sandbox.onlinephpfunctions.com/) выводится предупреждение:

<br />
<b>Warning</b>:  compact() has been disabled 
for security reasons in <b>[...][...]</b> 
on line <b>6</b><br />

Обновлено: на локальной машине у меня тоже пустой массив, ответ в следующем комментарии.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

В качестве аргументов она принимает имена переменных или массивы
имен переменных.

У вас же в двойные кавычки подставляются сразу значения -- т.е. интерпретор при работе compact() пытался найти в том числе и переменную с именем $Сергей
-- а такой переменной у вас не определено, нужно просто имена переменных без доллара (если бы кавычки были одинарными все равно - без доллара).

Гляньте аналогичный пример тут: https://www.php.net/manual/ru/function.c...

т.е. скорее всего подразумевался код:

$firstname = "Сергей"; 
$lastname = "Банников"; 
$role = "Редактор"; 
$subarray = array ("firstname", "lastname"); 
$resultarray = compact ($subarray, "role"); 
print_r ($resultarray);

_____________
матфак вгу и остальная классика =)

Согласен. Невнимательно скопировал задачу из книги. Теперь все получилось. Спасибо.

vedro-compota's picture

Интересно, почему переменные в кавычках, а массиву "можно" быть со знаком $ ?

дело в том, что массив у вас идет как обычная переменная (вместо него будет использованы литералы, которые он содержит), а вот если вы передадите имя переменной, то вместо неё будет использоваться её значение. Тут надо просто понимать, что именно ожидает от пользователя compact().

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

Интересно, почему переменные в кавычках, а массиву "можно" быть со знаком $

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

В случае же если вы делаете так:

$lastname = "Банников"; 
$resultarray = compact ("$lastname");

то вы указываете использовать переменную 'Банников', потому что именно к этому виду приведет подстановка значения в двойные кавычки.

_____________
матфак вгу и остальная классика =)