Взять последнее значение массива. PHP-массив: удалить элемент первый, последний, по значению. Загрузка файлов и динамика свойств массивов


PHP - это перспективно и современно: качественный синтаксис и возможность делать семантику за пределами дозволенного. Реализация идей объектно-ориентированного программирования и свобода изменения типа переменной делает реальностью самые смелые фантазии.

Массивы - древняя конструкция, а ассоциативные - скорее дань времени, нежели требование практики. Хотя есть достаточное количество задач, которые предполагают создание совокупностей данных заранее не предусмотренного содержания (количество, значения, типы и индексы), которые доступны для просмотра и использования в циклах Последний элемент массива доступен при любом способе создания. Array - обычные и ассоциативные - позволяют создавать списки, но в обычном синтаксисе PHP это имеет ограниченное применение.

Актуальное значение массива

Если абстрагироваться от индексов и использовать конструкцию

$arData = new scField(); // scNumber, scString, scParagraph, ...

где scField() - конструктор абстрактного объекта - "элемента информации", который имеет наследников: числа (scNumber), строки (scString), фразы (scParagraph), ... получим на PHP: последний элемент = массив объектов, проявляющий свои свойства как актуальный элемент.

По существу, неважно, какой элемент считать актуальным, но в этом случае придется следить за указателем (в PHP - курсор) внутри массива. Чаще - нужно иметь собственный указатель элемента. Необходимости в курсоре лишена идея PHP "последний элемент = массив". Доступный через функции end() и array_pop(), последний элемент как бы делегирует свои свойства массиву. Использование array_pop(), помимо этого, автоматически переводит массив на предыдущий элемент, и его свойства изменяются соответственно. Этим обуславливается возможность движения по элементам.

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

Первый и другие элементы

Имеются функции для работы с первым элементом массива и перемещения внутреннего указателя. В обычном синтаксисе, реализующем классическую практику программирования, они применимы. В отношении создания массивов с динамично изменяющимся смыслом - нет.

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

Если перенести центр тяжести на собственно элемент и предоставить ему самому принимать решения, реализация программы приобретает совершенно другой, осмысленный вид. Чаще всего именно такой способ позволяет достичь цели, особенно когда речь идет, например, об использовании многочисленных тегов документа *.docx, записанных в стандарте Open XML.

На PHP получить последний элемент массива - это новый смысл и хорошие возможности.

Загрузка файлов и динамика свойств массивов

Когда сайт предоставляет возможность загрузки каких-либо файлов, удобно использовать идею абстрактного объекта, например, scFile и потомков от него scImage, scDocument, scTabe, которые будут иметь одноименные свойства, но различное их проявление и смысл (содержание). В контексте синтаксиса PHP (последний элемент = массив), используя функцию end(), можно использовать его так, как это определяет последний элемент. Это решение интересно тем, что оно инвертирует обычные представления и позволяет перемещаться по структуре данных так, как она была сформирована.

Такое применение массивов дает им совершенно новое содержание. Это предусмотрено синтаксисом PHP, но такое использование открывает широкие возможности.

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

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

Стек и рекурсия в пределах синтаксиса

Когда идет работа только с последним элементом, основное условие - это стек, но, когда этот элемент исполняется и в нем используется та же конструкция, а особенно он сам, - это рекурсия. Можно сказать много хорошего о библиотеках PHPOffice, например PHPWord, но утверждать, что они реализуют полноценный механизм, транслирующий исходное форматирование документа в результат, нельзя.

Действительно, используя PHPOffice\PHPWord можно элементарно открыть любой вордовский документ (*.docx), но это всего лишь архив множества структурированных xml-файлов, рисунков, объектов и др.

При этом, если взять только xml-файлы, хотя они взаимосвязаны (в части стилей, таблицы, рисунков), не получится сформировать новый документ на основе старого и просто перенести в него желаемые изменения (например, изменить шрифт, цвета, форматирование). Вариантов применения тегов Open XML множество, и даже столь отлаженный продукт, как MS Word, не всегда справляется с идеями пользователя, допуская ошибки.

Собственно *.docx файл - это zip-архив, причем четкой и понятной структуры. Используя небольшое количество объектов, можно формально описать его и получить в момент чтения полноценную, самостоятельную структуру данных, которой можно будет управлять семантически.

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

ключу вывод (24)

Я пишу создателя SQL-запросов, используя некоторые параметры. В Java очень легко обнаружить последний элемент массива из цикла for, просто проверив текущую позицию массива с длиной массива.

For(int i=0; i< arr.length;i++){ boolean isLastElem = i== (arr.length -1) ? true: false; }

В PHP у них есть нецелые индексы для доступа к массивам. Таким образом, вы должны выполнять итерацию по массиву с использованием цикла foreach. Это становится проблематичным, когда вам нужно принять какое-то решение (в моем случае добавить или / и параметр при построении запроса).

Я уверен, что должен быть какой-то стандартный способ сделать это.

Как вы решаете это на PHP?

Answers

Вы также можете сделать что-то вроде этого:

End($elements); $endKey = key($elements); foreach ($elements as $key => $value) { if ($key == $endKey) // -- this is the last item { // do something } // more code }

Вы также можете попробовать это сделать свой запрос... показанный здесь с помощью INSERT

"monday","two"=>"tuesday","three"=>"wednesday","four"=>"thursday","five"=>"friday","six"=>"saturday","seven"=>"sunday"); $keys = array_keys($week); $string = "INSERT INTO my_table (""; $string .= implode("","", $keys); $string .= "") VALUES (""; $string .= implode("","", $week); $string .= "");"; echo $string; ?>

У меня сильное чувство, что в корне этой «проблемы XY» OP хотел просто функцию implode() .

Поскольку ваше намерение найти массив EOF - это просто клей. Познакомиться с нижеприведенной тактикой. Вам не требуется EOF:

$given_array = array("column1"=>"value1", "column2"=>"value2", "column3"=>"value3"); $glue = ""; foreach($given_array as $column_name=>$value){ $where .= " $glue $column_name = $value"; //appending the glue $glue = "AND"; } echo $where;

Column1 = value1 AND column2 = value2 AND column3 = value3

Вот еще один способ сделать это:

$arr = range(1, 10); $end = end($arr); reset($arr); while(list($k, $v) = each($arr)) { if($n == $end) { echo "last!"; } else { echo sprintf("%s ", $v); } }

Для сценариев генерации SQL-запросов или всего, что делает другое действие для первого или последнего элемента, оно намного быстрее (почти в два раза быстрее), чтобы избежать использования проверок ненужных переменных.

Текущее принятое решение использует цикл и проверку внутри цикла, которые будут сделаны every_single_iteration, правильный (быстрый) способ сделать это следующий:

$numItems = count($arr); $i=0; $firstitem=$arr; $i++; while($i<$numItems-1){ $some_item=$arr[$i]; $i++; } $last_item=$arr[$i]; $i++;

Небольшой домашний тест показал следующее:

test1: 100000 прогонов модели морга

время: 1869.3430423737 миллисекунды

test2: 100000 пробегов модели, если последняя

время: 3235.6359958649 миллисекунд

Мне нравится следующее, поскольку я чувствую, что это довольно аккуратно. Предположим, мы создаем строку с разделителями между всеми элементами: например, a, b, c

$first = true; foreach ($items as $item) { $str = ($first)?$first=false:", ".$item; }

$page_comment): ?>

Когда toEnd достигает 0, это означает, что он находится на последней итерации цикла.

$toEnd = count($arr); foreach($arr as $key=>$value) { if (0 === --$toEnd) { echo "last index! $value"; } }

Последнее значение по-прежнему доступно после цикла, поэтому, если вы просто хотите использовать его для большего количества материалов после цикла, это лучше:

Foreach($arr as $key=>$value) { //something } echo "last index! $key => $value";

Если вы не хотите рассматривать последнее значение как специальные внутренние циклы. Это должно быть быстрее, если у вас большие массивы. (Если вы повторно используете массив после цикла внутри той же области действия, вам нужно сначала «скопировать» массив).

//If you use this in a large global code without namespaces or functions then you can copy the array like this: //$array = $originalArrayName; //uncomment to copy an array you may use after this loop //end($array); $lastKey = key($array); //uncomment if you use the keys $lastValue = array_pop($array); //do something special with the last value here before you process all the others? echo "Last is $lastValue", "\n"; foreach ($array as $key => $value) { //do something with all values before the last value echo "All except last value: $value", "\n"; } //do something special with the last value here after you process all the others? echo "Last is $lastValue", "\n";

И ответить на ваш оригинальный вопрос «в моем случае добавить или / и параметр при построении запроса»; это будет охватывать все значения, а затем объединить их в строку с «и» между ними, но не до первого значения или после последнего значения:

$params = ; foreach ($array as $value) { $params = doSomething($value); } $parameters = implode(" and ", $params);

Вы все равно можете использовать этот метод с ассоциативными массивами:

$keys = array_keys($array); for ($i = 0, $l = count($array); $i < $l; ++$i) { $key = $array[$i]; $value = $array[$key]; $isLastItem = ($i == ($l - 1)); // do stuff } // or this way... $i = 0; $l = count($array); foreach ($array as $key => $value) { $isLastItem = ($i == ($l - 1)); // do stuff ++$i; }

Другой способ - запомнить предыдущий результат цикла цикла и использовать его в качестве конечного результата:

$result = $where = ""; foreach ($conditions as $col => $val) { $result = $where .= $this->getAdapter()->quoteInto($col." = ?", $val); $where .= " AND "; } return $this->delete($result);

Я лично использую такую ​​конструкцию, которая позволяет легко использовать элементы html

    и
  • : просто измените равенство для другого свойства...

    Массив не может содержать ложные элементы, но все остальные элементы, которые передаются в ложное логическое значение.

    $table = array("a" , "b", "c"); $it = reset($table); while($it !== false) { echo "all loops";echo $it; $nextIt = next($table); if ($nextIt === false || $nextIt === $it) { echo "last loop or two identical items"; } $it = $nextIt; }

    Вы можете dirctly получить последний индекс:

    $numItems = count($arr);

    echo $arr[$numItems-1];

    Предполагая, что у вас есть массив, хранящийся в переменной...

    Foreach($array as $key=>$value) { echo $value; if($key != count($array)-1) { echo ", "; } }

    Похоже, вы хотите что-то вроде этого:

    $array = array("First", "Second", "Third", "Last"); foreach($array as $key => $value) { if(end($array) === $value) { echo "last index!" . $value; } }

    Если вам нужно что-то сделать для каждого элемента, кроме первого или последнего, и только если в массиве имеется более одного элемента, я предпочитаю следующее решение.

    Я знаю, что существует много решений выше и размещено месяцев / за год до моего, но это то, что я чувствую, довольно элегантно. Проверка каждого цикла также является логической проверкой, в отличие от числовой проверки «i = (счет-1)», что может позволить уменьшить накладные расходы.

    Структура цикла может показаться неудобной, но вы можете сравнить ее с упорядочением тегов (начало), tfoot (end), tbody (current) в тегах HTML-таблицы.

    $first = true; foreach($array as $key => $value) { if ($first) { $first = false; // Do what you want to do before the first element echo "List of key, value pairs:\n"; } else { // Do what you want to do at the end of every element // except the last, assuming the list has more than one element echo "\n"; } // Do what you want to do for the current element echo $key . " => " . $value; }

    Например, в терминах веб-разработки, если вы хотите добавить border-bottom для каждого элемента, кроме последнего в неупорядоченном списке (ul), тогда вы можете вместо этого добавить границу-верхнюю часть для каждого элемента, кроме первого (CSS: first-child, поддерживаемый IE7 + и Firefox / Webkit, поддерживает эту логику, тогда как: последний-ребенок не поддерживается IE7).

    Вы можете свободно повторно использовать переменную $ first для каждого вложенного цикла, и все будет работать нормально, поскольку каждый цикл делает $ first false во время первого процесса первой итерации (так что breaks / exceptions не вызовут проблем) ,

    $first = true; foreach($array as $key => $subArray) { if ($first) { $string = "List of key => value array pairs:\n"; $first = false; } else { echo "\n"; } $string .= $key . "=>("; $first = true; foreach($subArray as $key => $value) { if ($first) { $first = false; } else { $string .= ", "; } $string .= $key . "=>" . $value; } $string .= ")"; } echo $string;

    Пример вывода:

    List of key => value array pairs: key1=>(v1_key1=>v1_val1, v1_key2=>v1_val2) key2=>(v2_key1=>v2_val1, v2_key2=>v2_val2, v2_key3=>v2_val3) key3=>(v3_key1=>v3_val1)

    Одним из способов может быть обнаружение next итератора. Если на итераторе нет следующего, это означает, что вы находитесь в последнем цикле.

    Foreach ($some_array as $element) { if(!next($some_array)) { // This is the last $element } }

    Итак, если ваш массив имеет уникальные значения массива, то определение последней итерации тривиально:

    Foreach($array as $element) { if ($element === end($array)) echo "LAST ELEMENT!"; }

    Как вы видите, это работает, если последний элемент появляется только один раз в массиве, иначе вы получите ложную тревогу. В этом нет, вам нужно сравнить ключи (которые, безусловно, уникальны).

    Foreach($array as $key => $element) { end($array); if ($key === key($array)) echo "LAST ELEMENT!"; }

    Также обратите внимание на строгий оператор соприкосновения, что в этом случае весьма важно.

    Вот мое решение: просто получите счетчик вашего массива, минус 1 (начиная с 0).

    $lastkey = count($array) - 1; foreach($array as $k=>$a){ if($k==$lastkey){ /*do something*/ } }

    Похоже, вы хотите что-то вроде этого:

    $numItems = count($arr); $i = 0; foreach($arr as $key=>$value) { if(++$i === $numItems) { echo "last index!"; } }

    При этом вы не хотите - перебирать «массив», используя foreach в php.

    Есть уже много ответов, но стоит также заглянуть в итераторы, тем более, что его попросили стандартный способ:

    $arr = range(1, 3); $it = new CachingIterator(new ArrayIterator($arr)); foreach($it as $key => $value) { if (!$it->hasNext()) echo "Last:"; echo $value, "\n"; }

    Вы можете найти что-то, что делает более гибким и для других случаев.

    Неустранимая ошибка: вызов функции-члена... на не объект

    Бывает с кодом, похожим на xyz->method() где xyz не является объектом, и поэтому этот method не может быть вызван.

    Это фатальная ошибка, которая остановит сценарий (уведомление о прямой совместимости: это станет захватывающей ошибкой, начиная с PHP 7).

    Чаще всего это признак того, что в коде отсутствуют проверки на наличие ошибок. Подтвердите, что объект фактически является объектом перед вызовом его методов.

    typical примером может служить

    // ... some code using PDO $statement = $pdo->prepare("invalid query", ...); $statement->execute(...);

    В приведенном выше примере запрос не может быть подготовлен, и prepare() присваивает false $statement . Попытка вызова метода execute() приведет к Fatal Error, потому что false является «не-объектом», потому что значение является логическим.

    Выясните, почему ваша функция вернула логическое значение вместо объекта. Например, проверьте объект $pdo для последней произошедшей ошибки. Подробности о том, как отлаживать это, будут зависеть от того, как обрабатываются ошибки для конкретной функции / объекта / класса.

    Если даже ->prepare терпит неудачу, ваш $pdo дескриптора базы данных $pdo не попадает в текущую область . Найдите, где он определился. Затем передайте его как параметр, сохраните его как свойство или поделите его через глобальную область.

    Другой проблемой может быть условное создание объекта, а затем попытка вызова метода вне этого условного блока. Например

    If ($someCondition) { $myObj = new MyObj(); } // ... $myObj->someMethod();

    Пытаясь выполнить метод вне условного блока, ваш объект не может быть определен.

    Связанные вопросы:

    • Вызов функции-члена на не-объекте
    • Список всех PHP «Неустранимая ошибка: вызов функции-члена... на не-объект» Вопросы по

    Массивы PHP используются повсеместно. Добавление и изменение значений, как правило, не вызывает затруднений.

    Удаление элементов массива - особенная операция. Можно просто удалить элемент, а можно удалить и использовать. Этот нюанс дает большие возможности.

    Массивы PHP

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

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

    Примеры создания и использования массива

    Функция scPrint - вспомогательная. Она рекурсивно записывает массив в строку символов для демонстрации получаемых результатов.

    Массив $aFruits создается обычным образом: перечисляются значения, индексы назначаются автоматически с нуля. Последняя запятая не имеет значения и не приводит к созданию еще одного пустого элемента.

    Массив $aData создается пустым, потом в него вносятся значения. Три - автоматом, а два - с ассоциативными индексами, которые не влияют на общую нумерацию значений. Так, элементы "слива" и "персик" имеют индексы "новая" и "свежий" соответственно.

    Массив $aInfo - многомерный и ассоциативный.

    Как в PHP-массиве удалить элемент, показывают три операции удаления.

    Первая операция удаляет второй элемент из массива $aFruits, у него индекс равен 1. Следует отметить, что следующие за ним индексы не сдвигаются, значит, в циклических операциях с таким массивом следует предусмотреть проверку существования элемента.

    Вторая операция - удаляет последний и первый элементы в массиве $aData, что подтверждает отсутствие влияния удаления на индексы и возможность одновременного удаления нескольких элементов.

    Третья - удаляет массив в массиве и элемент в массиве, входящий в другой массив.

    Обычное удаление элементов - unset

    Функция unset удаляет. Неважно, что. Это может быть просто переменная или элемент массива. Считается, что unset() - это оператор языка, а не функция. Никакого значения этот оператор не возвращает, а то, что ему передано в качестве параметров, он «разрушает». Переменная или массив исчезают, как будто их не было.

    На PHP удалить пустые элементы массива можно по-разному, собственно, что считать пустым элементом - зависит от программиста. Однако не слишком разумно использовать для этого несколько параметров в операторе unset(). Практичнее групповые операции выносить в групповые функции.

    Современные компьютеры очень быстро работают, а PHP очень скор. Но это не повод создавать и обрабатывать тонны информации громоздкими алгоритмами, это объективное основание подойти к процессу удаления элементов массива прогрессивными способами.

    Удаление элементов строчными методами

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

    Понятие пустого элемента зависит от задачи. Часто пустым становится существующий элемент массива, в котором содержатся определенные сведения. Например, в массиве ведется учет посетителей. Элемент массива содержит:

    • время прихода посетителя;
    • текущий режим работы;
    • активную страницу;
    • время последнего действия.

    Если разница между временем прихода и временем последнего действия составляет более 1 минуты (или иное значение), можно считать, что клиент покинул сайт. Записи о таких клиентах можно удалять, если стоит задача мониторить список активных посетителей и не использовать более совершенные методы с использованием JavaScript.

    Однако «строчная» обработка хороша. Например, на PHP удалить повторяющиеся элементы массива можно так:

    Быстрый и доступный способ. Необязательно использовать символы "[" и "]" для обозначения каждого элемента, но следует помнить, что, трансформируя массив в строку, нужно соблюсти требование уникальности каждого его элемента. Символы для обрамления следует выбирать с учетом символов, которые допустимы в элементе. Незыблемое правило: каждый элемент массива в строке уникален и имеет свое место (иначе ничего не вернуть обратно).

    Этот способ удобнее, когда стоит задача на PHP удалить элемент массива по значению. Можно использовать функцию array_flip и поменять значения и ключи местами, потом сделать классический unset. Можно использовать функцию array_search и найти ключ значения, которое нужно удалить. Но строчный вариант решения нагляднее и проще.

    PHP практически ни в чем не ограничивает разработчика: ни в количестве размерностей, ни в размерах элементов. Смысла увлекаться этим нет. Каждый элемент должен быть минимально возможной длины, а количество размерностей должно стремиться к единице.

    Если количество размерностей массива более трех - это веское основание пересмотреть решение. Если элемент массива имеет длину более 4000-8000 символов, должны возникать сомнения в разумности построенной картины данных.

    Это мнение вытекает не из контекста функциональности PHP-массива: удалить элемент, добавить объект другого типа, изменить что-то одно на что-то совсем другое. Простота - залог успеха не только в жизни, но и в алгоритме. Программа должна работать, а не удивлять своими размерностями, размерами и масштабами идей. Важен результат, а не грандиозная идея.

    Как современный язык программирования PHP не проходит мимо рекурсии и стека. Принципиально неважно, что имеет в виду программист, когда использует функцию array_pop() в PHP: удалить последний элемент массива или просто получить его в какую-либо переменную.

    Но следует иметь в виду, что в данном контексте функция array_pop - это из сферы push & pop, то есть это инструменты стека, а не удаления.

    Здесь принято говорить не «удалить», а «извлечь». Семантика существенно отличается. Однако функция array_shift() в PHP: удалить первый элемент массива или извлечь его - имеет иной оттенок. Здесь также элемент извлекается во внешнюю переменную, и его не будет в массиве, но индексы смещаются.

    При извлечении первого элемента из массива все следовавшие за ним элементы смещаются вперед, но изменяются только числовые индексы, строчные остаются неизменными.

    Удалить или изменить: история операций

    Переменная - это очень давнее прошлое, массив - это уже давно было, объект - это было вчера. Об объектно-ориентированном программировании еще пока только говорят, но ничего не используют в полную силу. Редкий случай, когда поверхностные решения стали предметом восторженных решений и «умудренных» массой «тела» систем управления сайтами (CMS).

    Объективное правило: не в количестве кода все дело, а в его качестве! Но никакая современная CMS к этому правилу еще не прислушалась. Ее авторы считают, что они поступают правильно и знают, что делают.

    Результат (характерная черта): ни одна из современных CMS не отличается приличной «фигурой» (стройностью и легкостью конструкций), все обладают необъятной полнотой кода, каждая требует к себе уважения:

    • высокой квалификации программиста;
    • нуждается в инсталляции;
    • предъявляет требования к хостингу;
    • создает трудности при переезде на другой хостинг;
    • реально тормозит в работе и администрировании.

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

    • undo;
    • redo.

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

    Операции PHP на массиве: удалить элемент, изменить его тип или добавить что-то новое - понятны. Но раньше были переменные, потом массивы, затем объекты. Разве не повод задуматься о том, что массив - это просто переменная в течение времени?

    Массив - это структура данных в течение времени. Ни один язык по сей день не рассматривает время как фактор синтаксиса. Про семантику можно даже не говорить: с древнейших времен по сей день программисты и пользователи понимают только файлы и папки. Максимум до чего дошло развитие, например, на PHP пространство имен (namespace) банально отражается на структуру папок и файлов.

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

    Это будет совсем другой уровень работы и кардинально лучшее качество результата.







2024 © uzbek-seks.ru.