When handling database data, developers often encounter a common scenario: the field names of a table are already known, and there’s a need to assign them a unified initial value in the application. For instance, when preparing to insert data or initialize a set of form fields, a "field => default value" structure is required.
Traditionally, this would involve manually assigning values to each field—an approach that's not only verbose but also difficult to maintain. Fortunately, PHP offers a powerful built-in function, array_fill_keys(), that provides an elegant solution and improves data processing efficiency.
array_fill_keys() takes an array of keys and assigns the same value to each, returning a new associative array. The function signature is as follows:
array array_fill_keys(array $keys, mixed $value)
$fields = ['name', 'email', 'phone'];
$initialValues = array_fill_keys($fields, null);
<p>print_r($initialValues);<br>
Output:
Array
(
[name] =>
[email] =>
[phone] =>
)
This code quickly assigns a null value to all fields, which is especially useful during initialization.
Imagine you need to insert a new record, and the table structure looks like this:
name
phone
created_at
updated_at
You can first define the field list and then quickly initialize the values using array_fill_keys:
$fields = ['name', 'email', 'phone', 'created_at', 'updated_at'];
$data = array_fill_keys($fields, '');
<p>$data['created_at'] = date('Y-m-d H:i:s');<br>
$data['updated_at'] = date('Y-m-d H:i:s');</p>
<p>// Example: preparing to insert into database<br>
$sql = "INSERT INTO users (name, email, phone, created_at, updated_at) VALUES (:name, :email, :phone, :created_at, :updated_at)";<br>
$stmt = $pdo->prepare($sql);<br>
$stmt->execute($data);<br>
This approach not only keeps the code concise but also makes it easier to maintain consistent field initialization.
In real-world development, fields may come from configuration files or be read from the database structure. You might want to initialize them with default values and then merge user input:
$defaultFields = ['name', 'email', 'phone'];
$defaults = array_fill_keys($defaultFields, '');
<p>// User-submitted data<br>
$userInput = [<br>
'name' => 'Alice',<br>
'email' => '<a class="cursor-pointer" rel="noopener">alice@example.com</a>'<br>
];</p>
<p>// Merge user input with defaults<br>
$data = array_merge($defaults, $userInput);</p>
<p>print_r($data);<br>
Output:
Array
(
[name] => Alice
[email] => alice@example.com
[phone] =>
)
This method ensures that even if some fields are missing from the user input, the data structure remains complete, making it easier to store or process later.
Suppose you want to build an API endpoint that returns a set of initialized form field data:
$fields = ['username', 'password', 'email', 'phone'];
$formData = array_fill_keys($fields, '');
<p>header('Content-Type: application/json');<br>
echo json_encode([<br>
'code' => 0,<br>
'message' => 'success',<br>
'data' => $formData,<br>
'doc_url' => '<a rel="noopener" target="_new" class="" href="https://m66.net/docs/form-api">https://m66.net/docs/form-api</a>'<br>
]);<br>
The client can directly render an empty form from this response without needing to guess the structure of the fields.
array_fill_keys() is an often overlooked but highly useful function, especially valuable during the data initialization phase for improving code simplicity and maintainability. Whether you're working with database fields, API responses, or default form values, this tool can play a vital role. As a PHP developer, it’s worth adding this function to your toolkit for writing cleaner and more efficient code.