поменять местами две переменные php

Поменять местами значения переменных в PHP

Существует красивое и элегантное решение в одну строку:

А для PHP версий 5.3 и старше можно воспользоваться сокращённым вариантом:

Что более читаемо и проще, чем классическое:

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

Существует ещё несколько классических решений, которые работают только с целочисленными переменными. Например, с помощью XOR:

Либо вариант со сложением и вычитанием:

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

Как поменять местами значения переменных в других языках

Для Python и Ruby будет такое элегантное решение:

А для PHP и Java знатоки предлагают такой вариант:

Для прочих языков можно попробовать воспользоваться такими решениями:

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

Читайте также

Иногда при обработке с помощью PHP больших и не очень данных, можно словить досадную ошибку посреди выполнения скрипта: PHP Fatal…

Vim не самый юзер-френдли текстовый консольный редактор, например, nano на порядок удобнее и интуитивнее. Однако, именно vim является редактором для…

Если в кратце, то суть такая: file_put_contents() не атомарен и не гарантирует записи данных файл, а может вообще очистить его…

Источник

Поменяйте местами две переменные в C / C ++, Python, PHP и Java

Python: в Python есть простая и синтаксически аккуратная конструкция для замены переменных, нам просто нужно написать «x, y = y, x».

C / C ++: Ниже приведено одно общепринятое классическое решение.

Однако мы можем использовать запятую для введения точек последовательности. Таким образом, модифицированное решение

Java: в Java четко определены правила оценки подвыражений. Левый операнд всегда оценивается перед правым операндом (см. Это для более подробной информации). В Java выражение «x ^ = y ^ = x ^ = y;» не дает правильного результата в соответствии с правилами Java. Это делает x = 0. Однако мы можем использовать «x = x ^ y ^ (y = x);» Обратите внимание, что выражения вычисляются слева направо. Если x = 5 и y = 10 изначально, выражение эквивалентно «x = 5 ^ 10 ^ (y = 5);». Обратите внимание, что мы не можем использовать это в C / C ++, как в C / C ++, не определено, выполняется ли левый операнд или правый операнд для любого оператора (см. Это для более подробной информации)

// C / C ++ программа для замены двух переменных в одной строке
#include

// Java программа для замены двух переменных в одной строке

public static void main (String[] args)

System.out.println( «After Swapping values of x and y are «

# Python программа для замены двух переменных в одной строке

// C # программа для обмена двумя
// переменные в одной строке

static public void Main ()

Console.WriteLine( «After Swapping values » +

// Этот код предоставлен aj_36

// PHP программа для обмена двумя
// переменные в одной строке

echo «After Swapping values of x and y are «

// Этот код предоставлен Вишалом Трипати
?>

Альтернативные решения:

Эта статья предоставлена Харшитом Гуптой. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Источник

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

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

Как сделать это в PHP, используя минимальное количество символов?

Критерий победы — минимальное количество символов. При прочих равных условиях ответ, опубликованный раньше, побеждает. Подведение итогов через 24 часа.

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

Комментарий, о причине выбора победителя:

Лидирующий ответ @PashaPash (0 символов) фактически не меняет переменных, поэтому не участвует в конкурсе.

Ответ от @Naumov (10 символов), вместо обмена переменных просто присваивает им новые значения. Ну и его длина не является постоянной, а зависит от значений переменных. Рассматривать этот ответ в рамках конкурсной программы я не буду.

Ответы (11 шт):

PHP, 25 20

PHP, 15 символов

PHP, 17 символов

17, 19, 23 и 42 символа

PHP, 15 Символов

в общем для оригинальности 28 символов

PHP, 14 Символов

Смеха ради, 76 символов

Совсем альтернативный вариант:

Гораздо лучше просто заменить использование переменных в том коде, который расположен ниже места, где вы собирались вписать swap.

PHP, 0 символов

PHP 10 символов

чтобы поменять их местами мы можем сделать так

Источник

Как поменять переменные местами?

Старая добрая задачка. Как поменять значения двух переменных местами? Первый вариант очевиден. Вводится третья переменная. Обмен происходит через нее. Пример для. Не представляю для кого.

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

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

Или с помощью менее затратных побитовых операций.

Для чего это может вообще понадобится? Буфер — это ведь просто и понятно. Могу предложить вашему вниманию две причины это знать. Неплохо для разминки мозга. Это первая. Можно представить, что у вас доступно мало памяти, но нет проблем с производительностью. Это вторая.

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

Если вы собираетесь использовать ассемблерную вставку при программировании на C, есть свои сложности. Вместо того, чтобы помещать в стэк непосредственно значения переменных, думаю, будет правильнее предварительно записать их в регистры. Но когда начинаешь так вмешиваться в работу программы, ни на какую помощь от компилятора рассчитывать не приходится. А ведь некоторые вещи действительно проще обсчитывать автоматически, пусть и не обязательно это эффективно. Привет вам, управляемые языки! А вот при программировании микроконтроллеров счастье управляемых языков недоступно, зато можно проявить свой талант в полной мере, все выверев самому.

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

Источник

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

Я хотел бы иметь возможность менять местами две переменные без использования временной переменной в C#. Можно ли это сделать?

28 ответов:

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

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

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

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

The право способ замены двух переменных:

другими словами, используйте временную переменную.

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

просто очень простой, читаемый, легко понять, t = a; a = b; b = t; решение.

решения где вы добавляете и вычитаете, или основанные на XOR, менее читаемы и, скорее всего, медленнее, чем простое решение «temp variable» (арифметические/булевы-ops вместо простых перемещений на уровне сборки).

сделайте себе и другим услугу, написав хороший качественный читаемый код.

Это моя декламация. Спасибо, что выслушали 🙂

работает для всех типов, включая строки и поплавки.

BenAlabaster показал практический способ выполнения переменного переключателя, но предложение try-catch не требуется. Этого кода достаточно.

использование такое же, как он показал:

вы также можете использовать метод расширения:

используйте его так:

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

двоичное исключающее или поменять с подробным пример:

таблица правды XOR:

вход:

Шаг 1:a = a ^ b

Шаг 2:Б = А ^ Б

Шаг 3:a = a ^ b

не в C#. В машинном коде вы можете использовать трюк с заменой triple-XOR, но не на высокоуровневом типобезопасном языке. (Во всяком случае, я слышал, что трюк XOR на самом деле оказывается медленнее, чем использование временной переменной во многих распространенных архитектурах ЦП.)

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

ради будущих учеников и человечества я представляю эту поправку к выбранному в настоящее время ответу.

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

вы должны никогда do:

потому что все любят жесткие цифры, вот программа, которая сравнивает ваши варианты. Запустите его в режиме выпуска из-за пределов Visual Studio, чтобы Swap встроена. Результаты на моей машине (Windows 7 64-бит i5-3470):

Edit: как отмечалось в комментариях, это не сработает, если y = 0, поскольку это приведет к ошибке деления на ноль, которую я не рассматривал. Таким образом, альтернативное решение +/- было бы лучшим способом пойти.

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

и можете сделайте это в одной строке кода:

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

если вы можете изменить с помощью decimal to double можно использовать Interlocked класса. Предположительно, это будет хороший способ обмена переменными с точки зрения производительности. Также немного более читаемый, чем XOR.

для полноты, вот двоичный XOR своп:

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

остерегайтесь своего окружения!

например, это, кажется, не работает в ECMAscript

мой совет? Предполагайте как можно меньше.

С помощью C# 7 Вы можете использовать деконструкцию кортежа для достижения желаемого свопа в одной строке, и понятно, что происходит.

простой способ поменять 2 числа всего в одной строке:

эффективный способ заключается в использовании:

Программирования C: (x ^= y), (y ^= x), (x ^= y);

Java: x = x ^ y ^ (y = x);

Примечание: наиболее распространенная ошибка, которую делают люди: / / замена с помощью побитовое XOR (неправильное решение в C/C++)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *