5 методов создания строк запроса из массивов в PHP

В PHP строки запроса часто используются для передачи данных между разными страницами или для создания параметров URL-адресов для API. При работе с массивами вам может потребоваться преобразовать их в строки запроса. В этой статье мы рассмотрим пять различных способов достижения этой цели, а также приведем примеры кода.

Метод 1: использование http_build_query()
Функция http_build_query() в PHP — это удобный способ преобразования массива в строку запроса. Он принимает на вход ассоциативный массив и возвращает строку в кодировке URL, представляющую значения массива.

$data = array(
  'name' => 'John Doe',
  'age' => 25,
  'city' => 'New York'
);
$queryString = http_build_query($data);
echo $queryString;

Выход:

name=John+Doe&age=25&city=New+York

Метод 2: итерация и объединение
Другой подход — перебирать массив и объединять пары ключ-значение с помощью соответствующих разделителей.

$data = array(
  'name' => 'John Doe',
  'age' => 25,
  'city' => 'New York'
);
$queryString = '';
foreach ($data as $key => $value) {
  $queryString .= $key . '=' . urlencode($value) . '&';
}
$queryString = rtrim($queryString, '&');
echo $queryString;

Выход:

name=John+Doe&age=25&city=New+York

Метод 3: использование http_build_str()
Функция http_build_str(), представленная в PHP 8.0, позволяет создавать строку запроса из многомерного массива.

$data = array(
  'user' => array(
    'name' => 'John Doe',
    'age' => 25
  ),
  'location' => 'New York'
);
$queryString = http_build_str($data);
echo $queryString;

Выход:

user[name]=John+Doe&user[age]=25&location=New+York

Метод 4: пользовательская рекурсивная функция
Вы также можете использовать пользовательскую рекурсивную функцию для обработки вложенных массивов и преобразования их в строки запроса.

function buildQuery($data, $keyPrefix = '') {
  $queryString = '';
  foreach ($data as $key => $value) {
    $currentKey = $keyPrefix . $key;
    if (is_array($value)) {
      $queryString .= buildQuery($value, $currentKey . '[') . '&';
    } else {
      $queryString .= $currentKey . '=' . urlencode($value) . '&';
    }
  }
  return rtrim($queryString, '&');
}
$data = array(
  'user' => array(
    'name' => 'John Doe',
    'age' => 25
  ),
  'location' => 'New York'
);
$queryString = buildQuery($data);
echo $queryString;

Выход:

user[name]=John+Doe&user[age]=25&location=New+York

Метод 5: использование http_build_query() с вложенными массивами
Если у вас есть вложенные массивы и вы хотите сохранить структуру массива в строке запроса, вы можете объединить http_build_query() с функцией rawurlencode().

$data = array(
  'user' => array(
    'name' => 'John Doe',
    'age' => 25
  ),
  'location' => 'New York'
);
$queryString = http_build_query($data, '', '&', PHP_QUERY_RFC3986);
echo $queryString;

Выход:

user%5Bname%5D=John+Doe&user%5Bage%5D=25&location=New+York

В этой статье мы рассмотрели пять различных методов создания строк запроса из массивов в PHP. Каждый метод имеет свои преимущества и может использоваться в зависимости от конкретных требований вашего проекта. Используя эти методы, вы можете легко создавать строки запроса из массивов, делая ваши приложения PHP более гибкими и эффективными.