Verification: a143cc29221c9be0

Php array from post data

◆ __construct()

__construct ( Server  $server,
array  $queryString,
array  $postData,
array  $files,
array  $cookies 
)

Creates new HttpRequest object.

Аргументы
Server $server
array $queryString _GET
array $postData _POST
array $files _FILES
array $cookies _COOKIE

См. определение в файле httprequest.php строка 62

63  {

66 

72  $this->headers = $this->buildHttpHeaders($server);

73  }

prepareCookie(array $cookies)

__construct(Base $connector)

Constructor.

◆ addFilter()

Applies filter to the http request data.

Preserve original values.

Аргументы
Type\IRequestFilter $filter Filter object

Переопределяет метод предка Request.

См. определение в файле httprequest.php строка 91

92  {

93  $filteredValues = $filter->filter(array(

94  "get" => $this->queryString->values,

95  "post" => $this->postData->values,

96  "files" => $this->files->values,

97  "headers" => $this->headers,

98  "cookie" => $this->cookiesRaw->values

99  ));

100 

101  if (isset($filteredValues['get']))

102  $this->queryString->setValuesNoDemand($filteredValues['get']);

103  if (isset($filteredValues['post']))

104  $this->postData->setValuesNoDemand($filteredValues['post']);

105  if (isset($filteredValues['files']))

106  $this->files->setValuesNoDemand($filteredValues['files']);

107  if (isset($filteredValues['headers']) && ($this->headers instanceof HttpHeaders))

108  $this->headers = $filteredValues['headers'];

109  if (isset($filteredValues['cookie']))

110  {

111  $this->cookiesRaw->setValuesNoDemand($filteredValues['cookie']);

113  }

114 

115  if (isset($filteredValues['get']) || isset($filteredValues['post']))

116  $this->values = array_merge($this->queryString->values, $this->postData->values);

117  }

◆ decode()

См. определение в файле httprequest.php строка 333

334  {

336  }

static convertEncodingToCurrent($string)

◆ getAcceptedLanguages()

См. определение в файле httprequest.php строка 274

275  {

276  static $acceptedLanguages = array();

277 

278  if (empty($acceptedLanguages))

279  {

280  $acceptedLanguagesString = $this->server->get("HTTP_ACCEPT_LANGUAGE");

281  $arAcceptedLanguages = explode(",", $acceptedLanguagesString);

282  foreach ($arAcceptedLanguages as $langString)

283  {

284  $arLang = explode(";", $langString);

285  $acceptedLanguages[] = $arLang[0];

286  }

287  }

288 

289  return $acceptedLanguages;

290  }

◆ getCookie()

Returns the COOKIES parameter of the current request.

Аргументы
Возвращает
null|string

См. определение в файле httprequest.php строка 210

211  {

212  return $this->cookies->get($name);

213  }

◆ getCookieList()

Returns the list of COOKIES parameters of the current request.

Возвращает
Type\ParameterDictionary

См. определение в файле httprequest.php строка 220

◆ getCookieRaw()

См. определение в файле httprequest.php строка 225

226  {

227  return $this->cookiesRaw->get($name);

228  }

◆ getCookieRawList()

◆ getCookiesMode()

Returns Y if persistant cookies are enabled, N if disabled, or empty if unknown.

Возвращает
null|string

См. определение в файле httprequest.php строка 526

527  {

529  }

getCookie($name)

Returns the COOKIES parameter of the current request.

◆ getDecodedUri()

Returns url-decoded and converted to the current encoding URI of the request (except the query string).

Возвращает
string

См. определение в файле httprequest.php строка 319

320  {

321  $parsedUri = new Web\Uri("http://".$this->server->getHttpHost().$this->getRequestUri());

322 

323  $uri = static::decode($parsedUri->getPath());

324 

325  if(($query = $parsedUri->getQuery()) '')

326  {

327  $uri .= "?".$query;

328  }

329 

330  return $uri;

331  }

◆ getFile()

Returns the FILES parameter of the current request.

Аргументы
Возвращает
null|mixed

См. определение в файле httprequest.php строка 167

168  {

169  return $this->files->get($name);

170  }

◆ getFileList()

Returns the list of FILES parameters of the current request.

Возвращает
Type\ParameterDictionary

См. определение в файле httprequest.php строка 177

◆ getHeader()

Returns the header of the current request.

Аргументы
string $name Name of header.
Возвращает
null|string

См. определение в файле httprequest.php строка 189

190  {

191  return $this->headers->get($name);

192  }

◆ getHeaders()

Returns the list of headers of the current request.

Возвращает
HttpHeaders

См. определение в файле httprequest.php строка 199

◆ getHttpHost()

Returns the host from the server variable without a port number.

Возвращает
string

См. определение в файле httprequest.php строка 342

343  {

344  if ($this->httpHost === null)

345  {

346 

347  $url = new Web\Uri("http://".$this->server->getHttpHost());

348  $host = $url->getHost();

349  $host = trim($host, "\t\r\n\0 .");

350 

351  $this->httpHost = $host;

352  }

353 

355  }

◆ getInput()

Returns raw request data from php://input.

Возвращает
bool|string

См. определение в файле httprequest.php строка 517

518  {

519  return file_get_contents("php://input");

520  }

◆ getPost()

Returns the POST parameter of the current request.

Аргументы
Возвращает
null|mixed

См. определение в файле httprequest.php строка 146

147  {

148  return $this->postData->get($name);

149  }

◆ getPostList()

Returns the list of POST parameters of the current request.

Возвращает
Type\ParameterDictionary

См. определение в файле httprequest.php строка 156

◆ getQuery()

Returns the GET parameter of the current request.

Аргументы
string $name Parameter name
Возвращает
null|mixed

См. определение в файле httprequest.php строка 125

126  {

127  return $this->queryString->get($name);

128  }

◆ getQueryList()

Returns the list of GET parameters of the current request.

Возвращает
Type\ParameterDictionary

См. определение в файле httprequest.php строка 135

◆ getRemoteAddress()

См. определение в файле httprequest.php строка 235

236  {

237  return $this->server->get("REMOTE_ADDR");

238  }

◆ getRequestedPage()

Returns the current page calculated from the request URI.

Возвращает
string

Переопределяет метод предка Request.

См. определение в файле httprequest.php строка 297

298  {

299  if ($this->requestedPage === null)

300  {

302  {

303  $this->requestedPage = parent::getRequestedPage();

304  }

305  else

306  {

307  $parsedUri = new Web\Uri("http://".$this->server->getHttpHost().$uri);

308  $this->requestedPage = static::normalize(static::decode($parsedUri->getPath()));

309  }

310  }

312  }

◆ getRequestMethod()

См. определение в файле httprequest.php строка 245

246  {

247  return $this->server->getRequestMethod();

248  }

◆ getRequestUri()

См. определение в файле httprequest.php строка 240

241  {

242  return $this->server->getRequestUri();

243  }

◆ getScriptFile()

Returns script file possibly corrected by urlrewrite.php or virtual_file_system.php.

Возвращает
string

См. определение в файле httprequest.php строка 472

473  {

475  if($scriptName == "/bitrix/routing_index.php" || $scriptName == "/bitrix/urlrewrite.php" || $scriptName == "/404.php" || $scriptName == "/bitrix/virtual_file_system.php")

476  {

477  if(($v = $this->server->get("REAL_FILE_PATH")) != null)

478  {

479  $scriptName = $v;

480  }

481  }

482  return $scriptName;

483  }

◆ getServerPort()

Returns server port.

Возвращает
string | null

См. определение в файле httprequest.php строка 255

256  {

257  return $this->server->getServerPort();

258  }

◆ getSystemParameters()

static getSystemParameters ( )
static

Returns the array with predefined query parameters.

Возвращает
array

См. определение в файле httprequest.php строка 489

490  {

491  static $params = array(

492  "login",

493  "login_form",

494  "logout",

495  "register",

496  "forgot_password",

497  "change_password",

498  "confirm_registration",

499  "confirm_code",

500  "confirm_user_id",

501  "bitrix_include_areas",

502  "clear_cache",

503  "show_page_exec_time",

504  "show_include_exec_time",

505  "show_sql_stat",

506  "show_cache_stat",

507  "show_link_stat",

508  "sessid",

509  );

510  return $params;

511  }

◆ getUserAgent()

Returns the User-Agent HTTP request header.

Возвращает
null|string

См. определение в файле httprequest.php строка 269

270  {

271  return $this->server->get("HTTP_USER_AGENT");

272  }

◆ isHttps()

См. определение в файле httprequest.php строка 357

358  {

359  if($this->server->get("SERVER_PORT") == 443)

360  {

361  return true;

362  }

363 

364  $https = $this->server->get("HTTPS");

365  if($https '' && mb_strtolower($https) "off")

366  {

367 

368 

369  return true;

370  }

371 

372  return (Config\Configuration::getValue("https_request") === true);

373  }

◆ isPost()

◆ modifyByQueryString()

modifyByQueryString (   $queryString )

См. определение в файле httprequest.php строка 375

376  {

378  {

380 

381  $this->values += $vars;

382  $this->queryString->values += $vars;

383  }

384  }

◆ normalize()

static normalize (   $path )
staticprotected

См. определение в файле httprequest.php строка 455

456  {

457  if (mb_substr($path, -1, 1) === "/")

458  {

459  $path .= "index.php";

460  }

461 

463 

464  return $path;

465  }

◆ prepareCookie()

prepareCookie ( array  $cookies )
protected
Аргументы
Возвращает
array

См. определение в файле httprequest.php строка 390

391  {

392  static $cookiePrefix = null;

393  if ($cookiePrefix === null)

394  $cookiePrefix = Config\Option::get("main", "cookie_name", "BITRIX_SM")."_";

395 

396  $cookiePrefixLength = mb_strlen($cookiePrefix);

397 

398  $cookiesCrypter = new Web\CookiesCrypter();

399  $cookiesNew = $cookiesToDecrypt = [];

400  foreach ($cookies as $name => $value)

401  {

402  if (mb_strpos($name, $cookiePrefix) !== 0)

403  continue;

404 

405  $name = mb_substr($name, $cookiePrefixLength);

406  if (is_string($value) && $cookiesCrypter->shouldDecrypt($name, $value))

407  {

408  $cookiesToDecrypt[$name] = $value;

409  }

410  else

411  {

412  $cookiesNew[$name] = $value;

413  }

414  }

415 

416  foreach ($cookiesToDecrypt as $name => $value)

417  {

418  $cookiesNew[$name] = $cookiesCrypter->decrypt($name, $value, $cookiesNew);

419  }

420 

421  return $cookiesNew;

422  }

static get($moduleId, $name, $default="", $siteId=false)

Returns a value of an option.

◆ $cookies

◆ $cookiesRaw

◆ $files

◆ $headers

◆ $httpHost

◆ $postData

What is Form?

When you login into a website or into your mail box, you are interacting with a form.

Forms are used to get input from the user and submit it to the web server for processing.

 The diagram below illustrates the form handling process.

A form is an HTML tag that contains graphical user interface items such as input box, check boxes radio buttons etc.

The form is defined using the

...
tags and GUI items are defined using form elements such as input.

In this tutorial, you will learn-

  • When and why we are using forms?
  • Create a form
  • POST method
  • GET method
  • GET vs POST Methods
  • Processing the registration form data
  • More examples

When and why we are using forms?

  • Forms come in handy when developing flexible and dynamic applications that accept user input.
  • Forms can be used to edit already existing data from the database

Create a form

We will use HTML tags to create a form. Below is the minimal list of things you need to create a form.

  • Opening and closing form tags
  • Form submission type POST or GET
  • Submission URL that will process the submitted data
  • Input fields such as input boxes, text areas, buttons,checkboxes etc.

The code below creates a simple registration form



	Registration Form

Registration Form

First name:
Last name:

Viewing the above code in a web browser displays the following form.

HERE,

  • are the opening and closing form tags
  • action="registration_form.php" method="POST"> specifies the destination URL and the submission type.
  • First/Last name: are labels for the input boxes
  • are input box tags

  • is the new line tag
  • is a hidden value that is used to check whether the form has been submitted or not
  • is the button that when clicked submits the form to the server for processing

Submitting the form data to the server

The action attribute of the form specifies the submission URL that processes the data. The method attribute specifies the submission type.

PHP POST method

  • This is the built in PHP super global array variable that is used to get values submitted via HTTP POST method.
  • The array variable can be accessed from any script in the program; it has a global scope.
  • This method is ideal when you do not want to display the form post values in the URL.
  • A good example of using post method is when submitting login details to the server.

It has the following syntax.

  HERE,

  • “$_POST[…]” is the PHP array
  • “'variable_name'” is the URL variable name.

PHP GET method

  • This is the built in PHP super global array variable that is used to get values submitted via HTTP GET method.
  • The array variable can be accessed from any script in the program; it has a global scope.
  • This method displays the form values in the URL.
  • It’s ideal for search engine forms as it allows the users to book mark the results.

It has the following syntax.

  HERE,

  • “$_GET[…]” is the PHP array
  • “'variable_name'” is the URL variable name.

GET vs POST Methods

POST GET
Values not visible in the URL Values visible in the URL
Has not limitation of the length of the values since they are submitted via the body of HTTP Has limitation on the length of the values usually 255 characters. This is because the values are displayed in the URL. Note the upper limit of the characters is dependent on the browser.
Has lower performance compared to Php_GET method due to time spent encapsulation the Php_POST values in the HTTP body Has high performance compared to POST method dues to the simple nature of appending the values in the URL.
Supports many different data types such as string, numeric, binary etc. Supports only string data types because the values are displayed in the URL
Results cannot be book marked Results can be book marked due to the visibility of the values in the URL

The below diagram shows the difference between get and post

 

Processing the registration form data

The registration form submits data to itself as specified in the action attribute of the form.

 When a form has been submitted, the values are populated in the $_POST super global array.

We will use the PHP isset function to check if the form values have been filled in the $_POST array and process the data.

We will modify the registration form to include the PHP code that processes the data. Below is the modified code



	Registration Form //this code is executed when the form is submitted

        

Thank You

You have been registered as

Go back to the form

Registration Form

First name:
Last name:

  HERE,

  • checks if the form_submitted hidden field has been filled in the $_POST[] array and display a thank you and first name message.

    If the form_fobmitted field hasn’t been filled in the $_POST[] array, the form is displayed.

More examples

Simple search engine

We will design a simple search engine that uses the PHP_GET method as the form submission type.

For simplicity’s sake, we will use a PHP If statement to determine the output.

We will use the same HTML code for the registration form above and make minimal modifications to it.



	Simple Search Engine

Search Results For

The GET method displays its values in the URL

Sorry, no matches found for your search term

Go back to the form

Simple Search Engine - Type in GET

Search Term:

View the above page in a web browser

The following form will be shown

Type GET in upper case letter then click on submit button.

The following will be shown

The diagram below shows the URL for the above results

Note the URL has displayed the value of search_term and form_submitted. Try to enter anything different from GET then click on submit button and see what results you will get.

Working with check boxes, radio buttons

If the user does not select a check box or radio button, no value is submitted, if the user selects a check box or radio button, the value one (1) or true is submitted.

We will modify the registration form code and include a check button that allows the user to agree to the terms of service.



	Registration Form

You have not accepted our terms of service

Thank You

You have been registered as

Go back to the form

Registration Form

First name:
Last name:
Agree to Terms of Service:

View the above form in a browser

Fill in the first and last names

Note the Agree to Terms of Service checkbox has not been selected.

Click on submit button

You will get the following results

Click on back to the form link and then select the checkbox

Click on submit button

You will get the following results

Передача данных в адресной строке

Одним из простых способов передачи данных php сценарию является адресная строка браузера, где после знака ? вы можете указать набор параметров в формате имя_параметра=значение если параметров несколько они разделяются сиvволом . Например:


http://mysite.local/script.php?username=Иван&age=25&position=менеджер

В данном примере:

  • http://mysite.local/script.php — адрес сценария
  • username=Иван — первый параметр username со значением Иван
  • age=25 — второй параметр
  • position=менеджер — третий параметра
  • & — символ разделения параметров в адресной строке

Все переданные параметры можно получить в сценарии script.php следующим образом:


/* Выведем глобальный массив $_GET в который 
попадут значения переданные через адресную строку*/

echo '
';
print_r($_GET);
echo '
';

Здесь мы выводим на экран глобальный массив $_GET функцией print_r() , если вы всё сделали правильно, то в браузере вы увидите примерно такой результат:


Array
(
    [username] => Иван
    [age] => 25
    [position] => менеджер
)

Справка: $_GET — это ассоциативный массив переменных, переданных php сценарию через адресную строку браузера (параметры URL). Обратите внимание, что данный массив не только заполняется для GET-запросов (отправляемых формой), а скорее для всех запросов со строкой запроса (обращения поисковых роботов, запросы к API и т.п.). Аналогично есть глобальный массив $_POST в который попадают переменные отправленные методом POST и массив $_REQUEST в который попадают все переменные из POST и GET запросов.

Такой способ передачи данных скрипту используется редко, обычно для тестирования (чтобы не писать html-форму) или когда вы пишите какой-то простой скрипт для промежуточной задаче и нужен некий «механизм» его запуска, можно поставить условие в сценарии на наличие параметра start=yes в адресной строке.

Трансляция формы

Теперь перейдём непосредственно к теме статьи. Для продолжения нам придётся сверстать небольшую форму, я предлагаю сделать её внутри тестового скрипта script.php из примеров выше. Вот пример html-формы:







Обратите внимание на атрибуты формы:

  • action — адрес скрипта который будет обрабатывать запрос от формы и
  • method — метод передачи данных

Параметр method по умолчанию равен get, но я привык указывать его явно. Так же обратите внимание на то, что у каждого поля формы ОБЯЗАТЕЛЬНО должен быть атрибут name именно значение из атрибута name попадёт в адресную строку как имя_параметра.  Если вы не укажете name у полей формы, вы не сможете корректно обработать переданные скрипту данные. Давайте отправим тестовые данные через форму и посмотрим результат.

Отправка GET-запроса через форму

Адресная строка при этом содержит всё что мы вводили в поля формы:


/script.php?username=Иван&age=25&position=менеджер&comment=тестовый+комментарий

Давайте немного улучшим наш скрипт, добавим небольшую проверку и выведем несколько сообщений в браузер. Вот так:


if(!empty($_GET['age'])){ //Проверяем что возраст заполнен
    if($_GET['age'] 

Пример максимально упрощён.

Обработка списков

Работа с выпадающим списком selectbox мало чем отличается от обычных полей, тут больше отличие со стороны HTML, давайте добавим в нашу форму небольшой selexbox для наглядной демонстрации:








Обратите внимание что у поля selectbox атрибут name указывается непосредственно в теге 

 а вот value — значение поля указывается внутри у тегов . Более того, по умолчанию при выводе формы в браузере, в поле selectbox всегда выбрано первое доступное значение. Т.е. при передаче данных скрипту, в параметре $_GET[‘gov’] всегда будет выбрано «Среднее». Чтобы этого избежать, обычно добавляют дополнительный


    

Обработка массивов

Что делать когда нужно передать несколько значений одного параметра? Например то же образование у человека может быть и средне-специальное и высшее. Можно добавить атрибут multipli в наш selectbox или использовать поле типа checkbox.  Давайте превратим наш selextbox в checkbox.





Образование
Среднее
Средне-специальное
Высшее
Второе высшее



Обратите внимание на квадрантные скобки в атрибуте name наших checkbox-ов, эти скобки означают что вы можете передать несколько значений под одним именем в данном случае edu (сокращение от английского education — образование) . Если заполнить форму и выбрать несколько образований, параметр edu будет передан как массив:


Array
(
    [username] => Иван
    [age] => 20
    [position] => менеджер
    [edu] => Array
        (
            [0] => Среднее
            [1] => Средне-специальное
            [2] => Высшее
        )

    [comment] => Тестовый комментарий
)

Это очень удобно, особенно для обработки сложных форм с множеством параметров.

Особенности отправки checkbox

Обратите внимание на прошлый пример. При использовании checkbox не нужно создавать отдельное поле с пустым value как это было у selectbox. Дело в том, что если вы не выбрали ни одно значение из предложенных checkbox-ов, этот параметр вовсе не будет отправлен на сервер. Это следует учитывать в вашем скрипте и делать дополнительную проверку на существование переменной в глобальном массиве $_GET.

Передача файла

Для отправки файла средствами веб-формы предусмотрено специальное поле file, давайте добавим его в нашу форму. Но прежде чем это сделать, нужно внести изменения в тег

а именно:
  1. Изменить метод передачи данных на post
  2. Добавить атрибут enctype=«multipart/form-data»

Вот так:



    


Образование
Среднее
Средне-специальное
Высшее
Второе высшее




Так же следует отметить, что данные о переданном на сервер файле попадают в отдельный глобальный массив $_FILES откуда мы можем их получить и корректно обработать файл.

Я добавил вот такой код перед формой, чтобы наглядно продемонстрировать содержимое глобальных массивов $_POST и $_FILES:


if($_POST){
    echo '
';
    print_r($_POST);
    echo '
'; } if($_FILES){ echo '
';
    print_r($_FILES);
    echo '
'; }

Отправляем форму, получаем такую картину:

Отправка файла через форму
Как видите поле resume не попало в массив $_POST а сразу перешло в массив $_FILES. Php сам определяет какие данные, каким методом и какого типа были переданы и распределяет их по доступным глобальным массивам.

Использование ClassTransformer

С его помощью я автоматически привожу данные к нужному мне классу. Рассмотрим более подробно все также на примере создание пользователя. К нам приходит запрос, и данные из него мы должны отправить в метод. В моем случае на Laravel проекте это выглядит вот так:

class UserController extends Controller {
	public function __construct(
      private UserService $userService,
	) {}

	public function createUser(CreateUserRequest $request)
	{
      $dto = ClassTransformer::transform(CreateUserDTO::class, $request);
      $user = $this->userService->create($dto);
      return response(UserResources::make($user));
	}
}
class CreateUserDTO
{
    public string $name;
    public string $email;
    public string $phone;
}

В запросе к нам приходит массив параметров: name, phone и email. Пакет просто смотрит есть ли такие параметры у класса, и, если есть, сохраняет значение. В противном случае просто отсеивает их. На входе transform можно передавать не только массив, это может быть другой object, из которого также будут разобраны нужные параметры.

Но наименования аргументов могут отличаться. Тогда, в созданной нами DTO, мы можем спокойно описать свою реализацию приведения:

class CreateUserDTO
{
    public string $name;
    public string $email;
    public string $phone;
    
    public static function transform(mixed $args):CreateUserDTO
    {
        $dto = new self();
        $dto->name = $args['fullName'];
        $dto->email = $args['mail'];
        $dto->phone = $args['phone'];
        return $dto;
    }
}

Существуют объекты гораздо сложнее, с параметрами определенного класса, либо массивом объектов. Что же с ними? Все просто, указываем параметру в PHPDoc путь к классу и все. В случае массива нужно указать, каких именно объектов этот массив:

class PurchaseDTO
{
    /** @var array $products Product list */
    public array $products;
    
    /** @var \DTO\UserDTO $user */
    public UserDTO $user;
}

Указывая параметру класс, вы можете строить более сложные цепочки связей. Пакет рекурсивно будет проходить по всем типизированным параметрам и приведет их к нужному формату.

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

Что мы получаем?

  • Метод сервиса работает с конкретным набором данным

  • Знаем все параметры, которые есть у объекта

  • Можно задать типизацию каждому параметру

  • Вызов метода становится проще, за счет удаления приведения вручную

  • В IDE работают все подсказки.

Аналоги

Увы, я не нашел подобных решений. Отмечу лишь пакет от Spatie - https://github.com/spatie/data-transfer-object

Он пытает решить ту же проблему используя DTO, но их подход заставляет ваш класс наследоваться от их DTO, и самим вызывать инициализацию, передавая в конструктор набор данных. При такой реализации я не вижу особо профита использования, ведь я так же могу сам прописать new DTO() и заполнить параметры.

Я же, в свою очередь, был вдохновлен методом преобразования из NestJS - plainToClass. Такой подход не заставляет реализовывать свои интерфейсы, что позволяет делать преобразования более гибким, и любой набор данных можно привести к любому классу. Хоть массив данных сразу в ORM модель (если прописаны параметры), но лучше так не надо:)

Цикл each (jQuery.each). Примеры использования

Синтаксис функции each:

// array или object - массив или объект, элементы или свойства которого необходимо перебрать
// callback - функция, которая будет выполнена для каждого элемента массива или свойства объекта
$.each(array или object,callback);

Работу с функцией each разберём на примерах.

Пример №1. В нём выполним переберор всех элементов массива (array).

// массив, состоящий из 3 строк
var arr = ['Автомобиль','Грузовик','Автобус'];

// переберём массив arr
$.each(arr,function(index,value){

  // действия, которые будут выполняться для каждого элемента массива
  // index - это текущий индекс элемента массива (число)
  // value - это значение текущего элемента массива
  
  //выведем индекс и значение массива в консоль
  console.log('Индекс: ' + index + '; Значение: ' + value);

});

/*
Результат (в консоли):
Индекс: 0; Значение: Автомобиль
Индекс: 1; Значение: Грузовик
Индекс: 2; Значение: Автобус
*/

В вышеприведённом коде функция each используется для перебора массива. Функция имеет 2 обязательных параметра. Первый параметр - это сущность (массив или объект), элементы (свойства) которой необходимо перебрать. В данном случае - это массив arr. Второй параметр - это функция обратного вызова, которая будет выполнена для каждого элемента (в данном случае) массива. Она имеет 2 параметра, которые доступны внутри неё посредством соответствующих переменных. Первый параметр - это порядковый номер элемента (отсчёт выполняется с 0). Второй параметр - это значение текущего элемента массива.

Пример №2. В этом примере осуществим перебор всех свойств объекта.

// объект smartphone, имеющий 5 свойств
var smartphone = {
  "name": "LG G5 se",
  "year": "2016",
  "screen-size": "5.3",
  "screen-resolution": "2560 x 1440",
  "os" : "Android 6.0 (Marshmallow)"
};

// переберём объект smartphone
$.each(smartphone, function( key, value ) {

  // действия, которые будут выполняться для каждого свойства объекта
  // key - текущее имя свойства массива
  // value - значение текущего свойства объекта
 
  // выведем имя свойства и его значение в консоль
  console.log( 'Свойство: ' +key + '; Значение: ' + value );

});

/*
Результат (в консоли):
Свойство: name; Значение: LG G5 se
Свойство: year; Значение: 2016
Свойство: screen-size; Значение: 5.3
Свойство: screen-resolution; Значение: 2560 x 1440
Свойство: os; Значение: Android 6.0 (Marshmallow)
*/

Функция each может использоваться для перебора JavaScript объектов. Отличие её использования заключается только в том, что параметры функции обратного вызова имеют другие значения. Первый параметр хранит название свойства объекта, а второй - значение этого свойства.

Пример №3. В нём осуществим перебор более сложной структуры (рассмотрим, как использовать вложенные each).

// объект, состоящий из 2 свойств. Каждое свойство этого объект имеет в качестве значения массив, элементами которого являются тоже объекты
var articles = {
  "Bootstrap": [
    {"id":"1", "title":"Введение"},
    {"id":"2", "title":"Как установить"},
    {"id":"3", "title":"Сетка"}
  ],
  "JavaScript": [
    {"id":"4", "title":"Основы"},
    {"id":"5", "title":"Выборка элементов"}
  ]  
};

$.each(articles,function(key,data) {
  console.log('Раздел: ' + key);
  $.each(data, function(index,value) {
    console.log('Статья: id = ' + value['id'] + '; Название = '+ value['title']);
  });
});

/*
Результат:
Раздел: Bootstrap
Статья: id = 1; Название = Введение
Статья: id = 2; Название = Как установить
Статья: id = 3; Название = Сетка
Раздел: JavaScript
Статья: id = 4; Название = Основы
Статья: id = 5; Название = Выборка элементов
*/

Как прервать each (выйти из цикла)

Прерывание (break) цикла each осуществляется с помощью оператора return, который должен возвращать значение false.

Например, прервём выполнение цикла each после того как найдём в массиве arr число 7:

// массив, состоящий из 5 чисел
var arr = [5, 4, 7, 17, 19];

// число, которое необходимо найти
var find = 7;

// переберём массив arr
$.each(arr, function (index, value) {
  // если необходимое число найдено, то..
  if (value === find) {
    // вывести его в консоль
    console.log('Ура! Число ' + find + ' найдено! Данное число имеет индекс: ' + index);
    // прервать выполнение цикла
    return false;
  } else {
  // иначе вывести в консоль текущее число
  console.log('Текущее число: ' + value);
  }
});

/* Результат (в консоли):
Текущее число: 5
Текущее число: 4
Ура! Число 7 найдено! Данное число имеет индекс: 2
*/

Как перейти к следующей итерации (each continue)

В each прерывание выполнения текущей итерации и переход к следующей осуществляется с помощью оператора return, который должен иметь значение отличное от false.

// массив, состоящий из чисел
var arr = [3, 5, 4, 9, 17, 19, 30, 35, 40];

// массив, который должен содержать все элементы массива arr, кроме чётных чисел
var newarr = [];

// переберём массив arr
$.each(arr, function (index, value) {

  // если элемент чётный, то пропустим его
  if (value % 2 === 0) {
    // прервём выполнение текущей итерации и перейдём к следующей
    return;
  }
  // добавить в массив newarr значение value
  newarr.push(value);

});

console.log('Исходный массив (arr): ' + arr.join());
console.log('Результирующий массив (newarr): ' + newarr.join());

/* Результат (в консоли):
Исходный массив (arr): 3,5,4,9,17,19,30,35,40
Результирующий массив (newarr): 3,5,9,17,19,35
*/