Php обмен значениями переменных

Есть ли функция PHP для обмена значениями двух переменных?

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

$var3 = $var1 $var1 = $var2 $var2 = $var3 

Для такой простой задачи, вероятно, быстрее использовать третью переменную, и я всегда мог бы создать свою собственную функцию, если бы захотел. Просто интересно, существует ли что-то подобное? Обновление: использование 3-ей переменной или ее упаковка в функции — лучшее решение. Это чисто и просто. Я задал вопрос больше из любопытства, и выбранный ответ был своего рода «лучшей альтернативой». Просто используйте третью переменную.

Вы также можете использовать xor, например . b = a xor b , a = a xor b , b = a xor b должно помочь . Не знаю, есть ли функция, я не очень хорошо разбираюсь в PHP.

19 ответов

TL; DR

Там нет встроенной функции. Используйте swap3() как указано ниже.

Резюме

Как уже упоминалось, есть несколько способов сделать это, наиболее заметными являются следующие 4 метода:

Я проверил 4 метода в цикле for из 1000 итераций, чтобы найти самый быстрый из них:

  • swap1() = набранное приблизительное среднее значение 0,19 секунды.
  • swap2() = набранное приблизительное среднее значение 0,42 секунды.
  • swap3() = набранное приблизительное среднее значение 0,16 секунды. Победитель!
  • swap4() = набранное среднее значение 0,73 секунды.

И для удобства чтения, я считаю, swap3() лучше, чем другие функции.

Заметка

  • swap2() и swap4() всегда медленнее других из-за вызова функции.
  • swap3() swap1() и swap3() очень похожа, но в большинстве случаев swap3() немного быстрее.
  • Внимание: swap1() работает только с числами!

Изменил ответ на этот, так как вопрос, кажется, привлек много внимания, и вы отметили их на скамейке. swap3 в основном совпадает с оригинальным вопросом, заключенным в функцию. Доказательство того, что простота часто лучше, даже если это означает дополнительные строки!

Swap2 явно лучше всего подходит для чтения / записи. Swap1 просто самонадеян, а Swap3 — это «не подкачка». Очевидно, что любой вариант подходит, если вы создаете свою собственную функцию-обертку, которая работает так, как вы хотите, так как swap(&$a,&$b) может быть полезен.

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

Почему бы не удалить swap1, если он работает только с числами? Это такая большая оговорка, и эта функция не имеет преимущества перед простой заменой, как в swap3

Существует еще один способ извлечения (массив (‘a’ => $ b, ‘b’ => $ a)); Пожалуйста, добавьте тест для этого.

Нет никакой функции, о которой я знаю, но есть односторонняя любезность Пит Грэхем:

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

Кроме того, как указывает @Paul Dixon, он не очень эффективен и дороже, чем использование временной переменной. Возможно, обратите внимание на очень большой цикл.

Читайте также:  Dbms output in java

Однако ситуация, когда это необходимо, немного пахнет мне. Если вы хотите обсудить это: для чего вам это нужно?

+1 — нашел то же самое, и согласен, не уверен, что мне это тоже нравится — значительно лучше использовать переменную temp — как и при написании собственного метода подкачки, если вы часто делаете это.

+1, опереди меня тоже 🙂 Мне идея в принципе нравится, но, к сожалению, синтаксис PHP просто оставляет плохой вкус .

используя его для переключения 2 значений в поле, если какой-либо plonker помещает значения в форму вокруг неправильного пути. Значения довольно ограничены тем, что они могут быть, поэтому достаточно легко выяснить, должны ли они были быть в другом направлении. Это удобнее в использовании, поэтому помогает тем, кто не очень хорош на компьютере . или просто имеет плохой момент. 🙂

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

@Paul отличная информация о тесте — он не имеет смысла для одной или двух операций, но будет иметь значение в циклах. Редактирование ответа, чтобы отразить это.

А поскольку этот ответчик скептически относится к тому, что заставило меня задуматься о том, имеет ли PHP встроенный метод swap() выполняет итерацию по массиву, в котором ключи содержат значения — например, они указывают столбцы в базе данных, а значения указывают значения. Однако, если пары нет, есть только значение, вы можете использовать значение в качестве ключа (своп) и использовать значение по умолчанию. Поскольку в моем примере мне не нужно хранить ключ, это не очень важно, но если бы мне нужно было сохранить индекс массива, я бы предпочел использовать вызов (bult-in) swap() не создавать тупо названный ключ. временный характер. Но это не встроенный .

Также стоит отметить, что вы можете поменять более 2 переменных с помощью этого фрагмента кода: $x = ‘x’; $y = ‘y’; $z = ‘z’; list($x, $y, $z) = [$y, $z, $x]; вернет $x = ‘y’; $y = ‘z’; $z = ‘x’; , Полезно для упорядочения стека, если у вас еще нет массива для этого 🙂

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

Источник

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

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

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

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

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

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

Читайте также:  Php script in form action

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

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

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

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

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

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

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

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

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

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

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

Источник

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

Здравствуйте.
Что-то учил учил PHP и никак не могу теперь решить казалось-бы на первый взгляд простую задачку.

Как поменять значения двух переменных местами НЕ ИСПОЛЬЗУЯ третью?

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

Поменять местами отображение переменных
Вот есть такой кусок кода из меню: $str = ‘<img.

Даны значения двух переменных a и b. Поменять местами значения этих переменных
1) Обмен значениями. Даны значения двух переменных a и b. Поменять местами значения этих переменных.

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

Поменять местами значения переменных
1. Даны целые переменные x и y. Поменять местами значения переменных tgx и e в степени у ,не.

Эксперт HTML/CSSЭксперт PHP

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

$a = 'foo'; $b = array('foo'); $a = array('first'=>$a, 'second'=>$b); $b = $a['first']; $a = $a['second']; var_dump($a, $b);

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

$a = 10; $b = 20; $a -= $b = ($a += $b) - $b; var_dump($a, $b);

ЦитатаСообщение от KOPOJI Посмотреть сообщение

 $a = 12; $b = 5; list($b, $a) = array($a, $b); var_dump($a, $b);

ЦитатаСообщение от KOPOJI Посмотреть сообщение

А тут гарантируется, что полученные в присваиваниях результаты сохранятся в $a и $b в том же порядке, в котором вычисляются? (Я php в таких подробностях не знаю. )

ЦитатаСообщение от DEA7H Посмотреть сообщение

Ага, пока не наткнёшься на какую-нибудь фичу. У xchg reg, [mem] будет неявный lock, из-за которого тормоза большие.

Эксперт HTML/CSSЭксперт PHP

ЦитатаСообщение от Somebody Посмотреть сообщение

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

Результатом выполнения оператора присваивания является само присвоенное значение. Таким образом, результат выполнения «$a = 3» будет равен 3. Это позволяет делать трюки наподобие:

 $a = ($b = 4) + 5; // $a теперь равно 9, а $b было присвоено 4. ?>

ЦитатаСообщение от Somebody Посмотреть сообщение

здесь многое аналогично и с «прародителем» — Си.
Выражение a = b = c выполняется как a = (b = c) , а не как (a = b) = c
поэтому можно записать короче..

Добавлено через 1 минуту

ЦитатаСообщение от DrobyshevAlex Посмотреть сообщение

я знал, что есть другие способы, но в голову пришло только решение «в лоб»

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

Источник

Системное и веб-программирование, компьютеры, игры

Сайт www.gcmsite.ru принадлежит одному человеку. Информационная составляющая сайта: помощь начинающим программистам и продвинутым пользователям компьютера в решении тех или иных проблем. На сайте представлена следующая информация:

Разделы сайта:

Набор программ для работы в локальной сети и интернете, мониторинга компьютера, его составляющих, поиска вирусов, изменения различных настроек Windows. Программы для создания виртуальных открыток. Все программы написаны на Pascal в среде Delphi 5. Набор программ для web-разработчиков по составлению META-тегов, проверка доступности партнерских ссылок и т.д. Базовые простые PHP-скрипты, форум и чат без MySQL, поиск по сайту за 5 минут.

Статьи о программировании на Delphi, Prolog, PHP, Pascal. Подробное рассмотрение частных случаев программирования. Статьи о web-дизайне, оптимизации страниц, безопасности разрабатываемых программ, безопасности работы в локальных и глобальных сетях, о вирусах и методах их устранения. Статьи об игростроении, алгоритмах и методах разработки программного обеспечения.

Разработка программного обеспечения для windows (простые и сложные программы, пользовательские и системные утилиты, акцент на индивидуальное техническое задание). Разработка php-скриптов (сервер Apache). Поисковая оптимизация сайта и продвижение в поисковых системах (SEO) и оптимизация php-скриптов. Анализ семантики сайта и предложение направления развития. Программное обеспечение, индивидуально заточенное для Вашей задачи.

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

  • Установка почтового клиента Outlook Express на персональный компьютер
    Хоть сейчас этой программой пользуются всё меньше и меньше, на офисных компьютерах российских компаний до сих пор почтовая программа Outlook Express присутствует. И как настраивать почту в этой программе — читайте в статье.
  • PHP. Базовые вопросы о php-файлах, php-скриптах
    Краткое описание вопросов и ответов по работе с файлами с помощью языка программирования PHP.
  • PHP: Случайный вывод за 3 минуты
    Несложные примеры программирования на PHP.
  • PHP: Безопасная работа с файлами
    Описание самодельного механизма блокировки, а также контроль доступа к файлам операционной системы средствами языка программирования PHP.

Источник

Оцените статью