Функция data_fill
Функция data_fill применяется для работы с массивами и объектами. Она принимает три параметра: целевую переменную (массив или объект), строку с "точечным" путём к элементу и значение, которое нужно установить. Особенность функции заключается в том, что она устанавливает значение только тогда, когда указанный путь отсутствует или его значение равно null.
Синтаксис
<?php
data_fill($target, $path, $value);
?>
Параметр $target может быть массивом или объектом. Параметр $path задаёт путь к элементу с использованием точек для разделения уровней вложенности. Параметр $value задаёт значение, которое будет установлено.
Пример
Давайте заполним вложенный массив, указав путь к несуществующему элементу:
<?php
$data = [
'user' => [
'name' => 'John',
],
];
data_fill($data, 'user.email', 'john@example.com');
print_r($data);
?>
Результат выполнения кода:
[
'user' => [
'name' => 'John',
'email' => 'john@example.com',
],
]
Как видите, функция добавила новый элемент по указанному пути.
Пример
Если путь уже существует, функция не будет перезаписывать значение:
<?php
$data = [
'user' => [
'name' => 'John',
'email' => 'old@example.com',
],
];
data_fill($data, 'user.email', 'new@example.com');
print_r($data);
?>
Результат выполнения кода:
[
'user' => [
'name' => 'John',
'email' => 'old@example.com',
],
]
Значение осталось прежним, поскольку путь user.email уже существовал.
Пример
Функция также работает с массивами, где путь содержит звёздочку для работы со всеми элементами:
<?php
$data = [
'users' => [
['name' => 'John'],
['name' => 'Jane'],
],
];
data_fill($data, 'users.*.email', 'default@example.com');
print_r($data);
?>
Результат выполнения кода:
[
'users' => [
['name' => 'John', 'email' => 'default@example.com'],
['name' => 'Jane', 'email' => 'default@example.com'],
],
]
Звёздочка позволила заполнить поле email для каждого пользователя в массиве.
Пример
Функцию можно использовать для работы с объектами:
<?php
$user = new stdClass();
$user->profile = new stdClass();
$user->profile->name = 'John';
data_fill($user, 'profile.email', 'john@example.com');
var_dump($user);
?>
Результат выполнения кода:
object(stdClass)#1 (1) {
["profile"]=>
object(stdClass)#2 (2) {
["name"]=>
string(4) "John"
["email"]=>
string(16) "john@example.com"
}
}
Функция добавила свойство email в объект по указанному пути.
Смотрите также
-
функция
data_get,
которая получает значение из массива или объекта по "точечному" пути -
функция
data_set,
которая устанавливает значение по "точечному" пути, перезаписывая существующее -
функция
data_forget,
которая удаляет элемент по "точечному" пути -
класс
Arr,
который предоставляет множество методов для работы с массивами