рд╕рд╛рд░рдгреА рдпрд╛ рдПрдХрд╛рдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реАрд▓реНрдб рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрд╢реЛрдзрди

рдЕрдХреНрд╕рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд┐рд╕реА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдВрднрд╡рддрдГ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди Google рдореЗрдВ "рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдХрдИ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛", "рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛", "рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреЗрдмрд▓ рдлрд╝реАрд▓реНрдбреНрд╕" рдЖрджрд┐ рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛, рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕реА рд╕рдордп рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ ред


рд╕рднреА рдЙрджрд╛рд╣рд░рдг PHP рдореЗрдВ рд╣реЛрдВрдЧреЗ, рдФрд░ mysql рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджреНрдпрдкрд┐ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреМрди рд╕реЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдЬреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди "рдирд┐рд░реНрджреЗрд╢реЛрдВ" рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛", "рдирд╛рдо", "рдирд┐рд░реНрдорд╛рдг рддрд┐рдерд┐" рдЬреИрд╕реЗ рдПрдХрд▓ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ, рдФрд░ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБ рдХреНрд╖реЗрддреНрд░ рднреА рд╣реИ - рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдПрдХ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдЯреЗрдмрд▓: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб, рд╕рдордп рдФрд░ рдкреНрд░рд╡реЗрд╢ рдХреА рдЕрдиреБрдорддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рджрд┐рдирд╛рдВрдХ рдФрд░ рд╡рд╣ рд╕рдордп рдФрд░ рджрд┐рдирд╛рдВрдХ, рдЬрд┐рд╕рд╕реЗ рдЕрднрд┐рдЧрдорди рдЕрд╕реНрд╡реАрдХреГрдд рд╣реИред

PHP рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
$document["id"] = "1"; //   $document["name"] = " "; //   $document["create_date"] = "25-10-2012"; //    $document["permissions_table"] = array( array( "user_id" => 1, //   "grant_from" => "2012-10-25 00:00:00", //        "grant_to" => "2012-10-27 23:59:59" //        ) ); 


рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдРрд╕рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 /* - document_header (   ,   -  ) id INT NOT NULL AUTOINCREMENT name TEXT NOT NULL create_date DATETIME NOT NULL - document_permissions (   ,   -  ) id INT NOT NULL AUTOINCREMENT document_id INT NOT NULL user_id INT NOT NULL grant_from DATETIME grant_to DATETIME */ 


рдЗрд╕рдХреЗ рдмрд╛рдж, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдкрд╣реБрдБрдЪ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЙрдарддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЬрдорд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рджреЛ рд╕рд░рдгрд┐рдпрд╛рдБ рдорд┐рд▓рддреА рд╣реИрдВ: рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдФрд░ рдирдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреАред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ SQL рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдлреНрд▓реИрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
 $changes = array(); foreach($old_document as $k => $v) { if($k == "permissions_table") continue; if($old_document[$k] != $new_document[$k]) $changes[$k] = $new_document[$k]; } $changes["id"] = $old_document["id"] $changes["document_id"] = $old_document["document_id"] 


рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдмрджрд▓реЗ рд╣реБрдП рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рдирдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде $ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЕрджреНрдпрддрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдПрдХреНрд╕реЗрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рдкреБрд░рд╛рдиреА рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- рдПрдХ рдирдИ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ
- рдкреБрд░рд╛рдиреА рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛ рджреА рдЧрдИ рд╣реИ
- рд▓рд╛рдЗрди рдСрд░реНрдбрд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ

рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрдпреЛрдЬрдиред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдЪрд┐рдд рдХреНрд╡реЗрд░реА рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
1. рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛
2. рдореМрдЬреВрджрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ
3. рдирдИ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдирд╛
рд╡рд┐рд▓реЛрдкрди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдпрд╛ рд╕рдВрд╢реЛрдзрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рди рд╣реЛред

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдкрд░ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдпрд╣ рд╣рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рддреАрди рд╕рд░рдгрд┐рдпрд╛рдВ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рдЯрд╛рдП, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдФрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд╛рд░реНрдп рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рд╕рд╛рд░рдгреАрдмрджреНрдз рдбреЗрдЯрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред

рддреЛ, рдЬрд╛рджреВ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рдореНрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:
 /* @$data -      @$old_data -      @$keys -       (, .      ) @$hidden_keys -     ,     (.      ) @$options -   */ 

рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдХрд╝реАрдорддреА рдПрд░реЗрдЬрд╝ рдбрд┐рд▓реАрдЯ, рдЕрдкрдбреЗрдЯ, рдЗрдВрд╕рд░реНрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдирдХреЗ рдмрд╛рдж рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд╢реНрдЪрди рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╕реНрд░реЛрдд рдХреЛрдб:
 static function generateOperationsFromMultiData($data, $old_data, $keys, $hidden_keys, $options) { $out = array("insert" => array(), "update" => array(), "delete" => array()); $unique_elements = array(); $unique_keys = array(); //           $old_elements_hashes = array(); $old_elements_keys = array(); foreach($old_data as $k => $fields) { $res = self::__getKeyAndHashFromLine($fields, $keys, $hidden_keys); $old_data[$k]["___key"] = $res["key"]; $old_data[$k]["___hash"] = $res["hash"]; if($res["key"]) { $old_elements_hashes[$res["key"]] = $res["hash"]; $old_elements_keys[$res["key"]] = $k; } else { $old_elements_hashes[$k] = $res["hash"]; } } //     $data = array_merge($data); foreach($data as $k => $fields) { $res = self::__getKeyAndHashFromLine($fields, $keys); $data[$k]["___key"] = $res["key"]; $data[$k]["___hash"] = $res["hash"]; foreach($hidden_keys as $k2) unset($fields[$k2]); //        if($options["unique"]) { if(in_array($res["hash"], $unique_elements)) continue; else $unique_elements[] = $res["hash"]; } if($res["key"]) { //         if(in_array($res["key"], $unique_keys)) continue; else $unique_keys[] = $res["key"]; //          if(!isset($old_elements_hashes[$res["key"]])) $out["insert"][$k] = $fields; else { //      ,    if($res["hash"] != $old_elements_hashes[$res["key"]]) { //         foreach($hidden_keys as $v) { $fields[$v] = $old_data[$old_elements_keys[$res["key"]]][$v]; } //        $out["update"][$k] = $fields; } $old_data[$old_elements_keys[$res["key"]]]["___new_key"] = $k; unset($old_elements_hashes[$res["key"]]); unset($old_elements_keys[$res["key"]]); } } else { //            if($key = array_keys($old_elements_hashes, $res["hash"])) { $key = current($key); unset($old_elements_hashes[$key]); $old_data[$key]["___new_key"] = $k; } else { //    ,    $out["insert"][$k] = $fields; } } } //   old_data      if($keys) foreach($old_elements_keys as $k => $v) { unset($old_data[$v]["___key"]); unset($old_data[$v]["___hash"]); unset($old_data[$v]["___new_key"]); $out["delete"][] = $old_data[$v]; unset($old_data[$v]); } else foreach($old_elements_hashes as $k => $v) { unset($old_data[$k]["___key"]); unset($old_data[$k]["___hash"]); unset($old_data[$k]["___new_key"]); $out["delete"][] = $old_data[$k]; unset($old_data[$k]); } //      //    $old_data = array_merge($old_data); $data = array_merge($data); if($options["save_order"]) { $delete = false; //    (  ,           update ) if($old_data[0]["___new_key"] != "0") $delete = true; foreach($old_data as $k => $v) { //    ,        if($v["___new_key"] != $k) $delete = true; if($delete) { unset($old_data[$k]["___key"]); unset($old_data[$k]["___hash"]); unset($old_data[$k]["___new_key"]); unset($data[$v["___new_key"]]["___key"]); unset($data[$v["___new_key"]]["___hash"]); $out["delete"][] = $old_data[$k]; foreach($hidden_keys as $hk) { $data[$v["___new_key"]][$hk] = $old_data[$k][$hk]; } $out["insert"][$v["___new_key"]] = $data[$v["___new_key"]]; if($keys) unset($out["update"][$v["___new_key"]]); } } } $out["update"] = array_merge($out["update"]); ksort($out["insert"]); $out["insert"] = array_merge($out["insert"]); return $out; } //     function __getKeyAndHashFromLine($line, $keys, $hide_keys = array()) { $hash = $line; //   foreach($keys as $v) unset($hash[$v]); foreach($hide_keys as $v) unset($hash[$v]); //    $hash = serialize($hash); //   $key = ""; foreach($keys as $v) $key .= "__" . $line[$v]; return array("hash" => $hash, "key" => $key); } 


рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
 $result = generateOperationsFromMultiData($new_document["permissions_table"], $old_document["permissions_table"], false, array("id"), array("unique" => false)); 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, $ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рддреАрди рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА: рд╣рдЯрд╛рдПрдВ , рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ , рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ ред

рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреВрдБрдЧрд╛ред
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рддреАрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░рд╛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред
 $old_document["permissions_table"] = array( array( "id" => 1, "document_id" => 1, "user_id" => 1, "grant_from" => "2012-10-25 00:00:00", "grant_to" => "2012-10-27 00:00:00" ), array( "id" => 2, "document_id" => 1, "user_id" => 2, "grant_from" => "2012-10-25 00:00:00", "grant_to" => "2012-10-27 00:00:00" ) ); $new_document["permissions_table"] = array( array( "document_id" => 1, "user_id" => 3, "grant_from" => "2012-10-25 00:00:00", "grant_to" => "2012-10-27 00:00:00" ), array( "document_id" => 1, "user_id" => 1, "grant_from" => "2012-10-25 00:00:00", "grant_to" => "2012-10-03 00:00:00" ), array( "document_id" => 1, "user_id" => 1, "grant_from" => "2012-10-25 00:00:00", "grant_to" => "2012-10-31 00:00:00" ) ); generateOperationsFromMultiData( $new_document["permissions_table"], $old_document["permissions_table"], array("user_id"), array("id"), array( "unique" => false, "save_order" => false ) ) 

рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣рдо рдкреНрд░рд╛рдкреНрдд:
 Array ( [insert] => Array ( [0] => Array ( [document_id] => 1 [user_id] => 3 [grant_from] => 2012-10-25 00:00:00 [grant_to] => 2012-10-27 00:00:00 ) ) [update] => Array ( [0] => Array ( [document_id] => 1 [user_id] => 1 [grant_from] => 2012-10-25 00:00:00 [grant_to] => 2012-10-03 00:00:00 [id] => 1 ) ) [delete] => Array ( [0] => Array ( [id] => 2 [document_id] => 1 [user_id] => 2 [grant_from] => 2012-10-25 00:00:00 [grant_to] => 2012-10-27 00:00:00 ) ) ) 

рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рддреАрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП $ new_document [рдЕрдиреБрдорддрд┐рдпрд╛рдВ_table] рд╕рд░рдгреА рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛, рдореИрдВ "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛" рдХрд╛ рд╕рд╣реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдЕрдм рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

$ рдХреБрдВрдЬрд┐рдпрд╛рдБ - рддрд╛рд▓рд┐рдХрд╛ рдбреЗрдЯрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреАред рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреБрдВрдЬреА "user_id" рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЙрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред рдХреБрдВрдЬрд┐рдпрд╛рдВ рд╕рдордЧреНрд░ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рд╕рд░рдгреА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрджрд┐ рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреБрдЫ рдЖрдИрдбреА рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ $ hidden_keys рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

$ hidden_keys - рдЫрд┐рдкреА рд╣реБрдИ рдХреБрдВрдЬрд┐рдпрд╛рдБ, рдпреЗ рдРрд╕реА рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдХреА рд╕рд░рдгреА рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдмрджрд▓реЗ рд╣реБрдП рдбреЗрдЯрд╛ рдХреА рд╕рд░рдгреА рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрдИ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЧреИрд░-рдХреБрдВрдЬреА рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВред рдлрд┐рд░, рдРрд╕реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЕрдиреВрдареА рдЖрдИрдбреА рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдлрд╝реЙрд░реНрдо рдореЗрдВ "рдбреНрд░реИрдЧ" рдХрд░рдирд╛ рдФрд░ рд╕рдВрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреА "рд╕реБрд░рдХреНрд╖рд╛" рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХреМрди рд╕реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИ, рдХрд┐рд╕рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ, рдФрд░ рдХреМрди рд╕реА рд▓рд╛рдЗрдиреЗрдВ рдирдИ рдЬреЛрдбрд╝рдирд╛ рд╣реИред

$ рд╡рд┐рдХрд▓реНрдк [рдЕрджреНрд╡рд┐рддреАрдп] - рдпрджрд┐ рдЖрдк рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдЕрд░реНрдерд╛рддреН, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, $ рд╡рд┐рдХрд▓реНрдк / рдЕрджреНрд╡рд┐рддреАрдп рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЕрд╡рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рдЙрдкрд▓рдмреНрдз рдЕрд╡рдзрд┐ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред

$ рд╡рд┐рдХрд▓реНрдк [save_order] - рдПрдХ рдзреНрд╡рдЬ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдЖрджреЗрд╢ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реА рддрд░рд╣ $ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдореЗрдВ (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, $ new_document [рдЕрдиреБрдорддрд┐рдпрд╛рдВ_table] )ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдзреНрд╡рдЬ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ $ рд╡рд┐рдХрд▓реНрдк [save_order] рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде:
 Array ( [insert] => Array ( [0] => Array ( [document_id] => 1 [user_id] => 3 [grant_from] => 2012-10-25 00:00:00 [grant_to] => 2012-10-03 00:00:00 ) [1] => Array ( [document_id] => 1 [user_id] => 1 [grant_from] => 2012-10-25 00:00:00 [grant_to] => 2012-10-03 00:00:00 [id] => 1 ) ) [update] => Array ( ) [delete] => Array ( [0] => Array ( [id] => 2 [document_id] => 1 [user_id] => 2 [grant_from] => 2012-10-25 00:00:00 [grant_to] => 2012-10-27 00:00:00 ) [1] => Array ( [id] => 1 [document_id] => 1 [user_id] => 1 [grant_from] => 2012-10-25 00:00:00 [grant_to] => 2012-10-27 00:00:00 ) ) ) 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рддреАрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдореМрдЬреВрджрд╛ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рдо рдПрдХ рд╣реА рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЫрдВрдЯрд╛рдИ рдХреЗ рдмрд┐рдирд╛, рд╣рдорд╛рд░реЗ рдирдП рд╕рд░рдгреА рдореЗрдВред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдкрд░ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдкрдВрдХреНрддрд┐ рдХреЛ рдмреАрдЪ рдореЗрдВ рдпрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдерд╛)

рдиреЛрдЯ: рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕реАрдорд╛рдПрдБ: рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рдордп рдкрдВрдХреНрддрд┐ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рд╕рдорддрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: "___key", "___hash", "___new_key"ред

Source: https://habr.com/ru/post/In156273/


All Articles