Формирование массива из переменных PHP

Раздел: PHP -> Массивы

Создание массива из отдельных переменных в PHP

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

Как создать ассоциативный массив с ключами, совпадающими с именами переменных?

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


$name = 'Иван';
$age = 30;
$city = 'Москва';
$result = compact('name', 'age', 'city');
print_r($result);

Php ключи массива (получение ключей массива в php)

Array
(
    [name] => Иван
    [age] => 30
    [city] => Москва
)

Php массивы индексы (получение индексов массива в php)

Типичные ошибки:

  • Если переменная не объявлена, compact() вызовет предупреждение Warning: compact() и вернёт массив без этой записи. Перед вызовом стоит проверять существование переменных функцией isset().
  • compact() работает только с переменными текущей области видимости. Для переменных внутри функции нужно передавать их в неё или использовать compact() внутри той же области.

Как создать индексированный массив из значений переменных?

Простейший способ - заключить переменные в квадратные скобки (короткий синтаксис массива).


$val1 = 'яблоко';
$val2 = 'груша';
$val3 = 'слива';
$array = [$val1, $val2, $val3];
print_r($array);

массив данных php (работа с массивом данных в php)

Array
(
    [0] => яблоко
    [1] => груша
    [2] => слива
)

массив ли php (проверка, является ли переменная массивом в php)

Если одна из переменных не определена, PHP выдаст предупреждение, а в массиве окажется null. Для надёжности следует инициализировать все переменные.

Как создать ассоциативный массив с произвольными ключами?

При явном указании ключей в квадратных скобках массив строится из пар ключ => значение.


$product = 'Ноутбук';
$price = 45000;
$stock = true;
$info = [
    'наименование' => $product,
    'цена' => $price,
    'в наличии' => $stock
];
print_r($info);

Php разбить массив (разбиение массива на части в php)

Array
(
    [наименование] => Ноутбук
    [цена] => 45000
    [в наличии] => 1
)

Php переменные массив (создание массива из переменных в php)

Одна из частых ошибок - перепутать ключи местами или забыть про синтаксис. Также стоит помнить о возможных конфликтах, если ключи повторяются.

Как создать массив из переменных, если их имена заданы в другом массиве?

Когда имена переменных известны не заранее, а хранятся, например, в списке строк, можно воспользоваться функцией array_combine() или циклом с переменными переменными ($$).

Пример с array_combine():


$keys = ['a', 'b', 'c'];
$a = 100;
$b = 200;
$c = 300;
$values = [$a, $b, $c];
$combined = array_combine($keys, $values);
print_r($combined);

Php сортировка массива (сортировка массива в php)

Array
(
    [a] => 100
    [b] => 200
    [c] => 300
)

ассоциативный массив php (ассоциативные массивы в php)

Ошибка возникает, если количество ключей и значений не совпадает - array_combine() вернёт false. Кроме того, все ключи и значения должны быть получены из актуальных переменных, что требует дополнительного кода для сборки списка значений.

Как использовать переменные переменные для динамического построения массива?

Переменные переменные позволяют обратиться к переменной по строковому имени, вычисляемому на лету.


$varName1 = 'x';
$varName2 = 'y';
$x = 10;
$y = 20;
$dynArray = [
    $varName1 => $$varName1,
    $varName2 => $$varName2
];
print_r($dynArray);

Php удалить массива (удаление всего массива в php)

Array
(
    [x] => 10
    [y] => 20
)

Применение $$ может сделать код менее читаемым и усложнить отладку. Также если имя переменной не существует, будет сгенерирована ошибка уровня notice или warning. Проверка isset($$name) перед использованием помогает избежать ошибок.

- Php array keys (функция array_keys в php)
- Php массив в строку (преобразование массива в строку php)
- Php key (ключи и массивы в php)

Расширенные примеры создания массивов из переменных

В этом разделе приведены более сложные и редко встречающиеся в простых уроках приёмы.

1. Использование compact() с проверкой существования переменных

Чтобы избежать предупреждений при неопределённых переменных, можно отфильтровать имена через array_filter() с использованием isset().

Пример

$username = 'admin';
$password = 'secret';
// Переменная $email не определена
$names = ['username', 'password', 'email'];
$existing = array_filter($names, function($name) {
    return isset($$name);
});
$result = compact(...$existing);
print_r($result);
Array
(
    [username] => admin
    [password] => secret
)

Обратите внимание на оператор распаковки ... для передачи отфильтрованных имён в compact().

2. Создание массива со всеми переменными текущей области видимости

Функция get_defined_vars() возвращает массив всех определённых переменных, включая суперглобальные. Чтобы получить только пользовательские, потребуется исключить служебные ключи.

Пример

$a = 1;
$b = 2;
$c = 3;
$allVars = get_defined_vars();
// Исключаем суперглобалы и другие служебные переменные
$userVars = array_diff_key($allVars, array_flip(['GLOBALS', '_SERVER', '_GET', '_POST', '_FILES', '_COOKIE', '_SESSION', '_REQUEST', '_ENV']));
print_r($userVars);
Array
(
    [a] => 1
    [b] => 2
    [c] => 3
    [allVars] => Array (...)
    [userVars] => Array (...)
)

Этот способ удобен для отладки, но в production-коде используется редко из-за избыточности.

3. Динамическое создание массива с помощью цикла foreach и переменных переменных

Когда список имён переменных динамический, можно пройтись по нему в цикле.

Пример

$fields = ['name', 'email', 'phone'];
$name = 'Анна';
$email = 'anna@example.com';
$phone = '+7-900-123-45-67';
$contact = [];
foreach ($fields as $field) {
    $contact[$field] = isset($$field) ? $$field : null;
}
print_r($contact);
Array
(
    [name] => Анна
    [email] => anna@example.com
    [phone] => +7-900-123-45-67
)

4. Комбинирование array_combine() с массивами ключей и значений, полученными из external источников

Предположим, что имена переменных приходят из JSON, а сами значения - из базы данных.

Пример

$jsonKeys = '["title","content","date"]';
$keys = json_decode($jsonKeys);
// Значения из переменных, полученных где-то ранее
$title = 'Заголовок';
$content = 'Текст статьи';
$date = '2025-01-01';
// Собираем значения в массив с теми же именами
$values = [];
foreach ($keys as $key) {
    $values[] = isset($$key) ? $$key : 'не определено';
}
$combined = array_combine($keys, $values);
print_r($combined);
Array
(
    [title] => Заголовок
    [content] => Текст статьи
    [date] => 2025-01-01
)

5. Использование list() для присвоения переменных из массива (обратная операция)

Хотя это не создание массива из переменных, а наоборот, полезно знать как альтернативу.

Пример

$data = ['Петр', 25, 'программист'];
list($userName, $userAge, $userJob) = $data;
echo "Имя: $userName, Возраст: $userAge, Должность: $userJob";
Имя: Петр, Возраст: 25, Должность: программист

Создание массива из переменных в PHP - comments

En
Php переменные массив (php)